Database (User)
ID Name
1 Ali
2 Abu
3 Ahmad
WriteBinaryFile.java
EntityManagerFactory emf = Persistence.createEntityManagerFactory("UserPU"); EntityManager em = emf.createEntityManager(); Query query1 = em.createNativeQuery("select * from user",User.class); List<User> list = query1.getResultList(); for(User userList: list){ FileOutputStream fos = new FileOutputStream("test.dat"); ObjectOutputStream oos = new ObjectOutputStream(fos); oos.writeObject(userList); oos.close(); }
ReadBinaryFile.java
FileInputStream fis = new FileInputStream("test.dat"); ObjectInputStream ois = new ObjectInputStream(fis); User user1 = (User) ois.readObject(); ois.close(); System.out.println(user1.getID+" "+user1.getName());
When I read ReadBinaryFile.java, I only can get the output like the following:
3 Ahmad
My expected output:
1 Ali
2 Abu
3 Ahmad
What am I doing wrong? How can I solve it?
Aren't you overwriting the file on each loop?
for(User user: list){
//overwrites the file on each loop
FileOutputStream fos = new FileOutputStream("test.dat");
ObjectOutputStream oos = new ObjectOutputStream(fos);
oos.writeObject(user);
oos.close();
}
You need to either create a new file for each user or write the entire list and read that back in.
FileOutputStream fos = new FileOutputStream("test.dat");
ObjectOutputStream oos = new ObjectOutputStream(fos);
oos.writeObject(list);
oos.flush();
oos.close();
FileInputStream fis = new FileInputStream("test.dat");
ObjectInputStream ois = new ObjectInputStream(fis);
List<User> users = (List<User>) ois.readObject();
ois.close();
for(User user : users){
System.out.println(user.getID() +" " + user.getName());
}
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.