【问题标题】:Java JPA write object to binary fileJava JPA 将对象写入二进制文件
【发布时间】:2015-07-09 00:26:40
【问题描述】:
  • 数据库(用户)
    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 艾哈迈德

  • 我做错了什么?我该如何解决?

【问题讨论】:

  • 问题显然出在List&lt;User&gt; list 中包含的数据上。进行适当的调试以找出查询返回单个结果而不是所有结果的原因。

标签: java jpa binaryfiles


【解决方案1】:

你不是在每次循环时都覆盖文件吗?

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());
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-07-08
    • 1970-01-01
    • 2020-08-28
    • 2014-09-25
    • 2015-07-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多