Java JPA 将对象写入二进制文件
Java JPA write object to binary file
数据库(用户)
ID 姓名
1 阿里
2 阿布
3 艾哈迈德
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());
当我读取ReadBinaryFile.java时,我只能得到如下输出:
3 艾哈迈德
我的预期输出:
1 阿里
2 阿布
3 艾哈迈德
我做错了什么?我该如何解决?
你不是每次循环都覆盖文件吗?
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();
}
您需要为每个用户创建一个新文件,或者写入整个列表并读回。
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());
}
数据库(用户)
ID 姓名
1 阿里
2 阿布
3 艾哈迈德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());
当我读取ReadBinaryFile.java时,我只能得到如下输出:
3 艾哈迈德我的预期输出:
1 阿里
2 阿布
3 艾哈迈德我做错了什么?我该如何解决?
你不是每次循环都覆盖文件吗?
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();
}
您需要为每个用户创建一个新文件,或者写入整个列表并读回。
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());
}