简体   繁体   中英

Java JPA write object to binary file

  • 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM