【问题标题】:Writing an ArrayList of non-string objects to file将非字符串对象的 ArrayList 写入文件
【发布时间】:2011-12-07 14:36:21
【问题描述】:

编辑:我解决了问题,我忘了关闭 ObjectOutputStream。哦!我会留下这个问题,以防有人想提出一个更优雅的选择,我们将不胜感激。

我目前正在尝试编写一个名为 phonebook to file 的类,其中包含一个名为 PhonebookEntry 的对象的 ArrayList。这是电话簿类:

import java.util.ArrayList;
import java.io.*;

public class Phonebook implements Serializable
    private static final long serialVersionUID = 1;

    ArrayList<PhonebookEntry> phonebookEntries = new ArrayList<PhonebookEntry>();

    public void addEntry(String name, String number) {
        PhonebookEntry newEntry = new PhonebookEntry(name, number);
        phonebookEntries.add(newEntry);
    }

}

我尝试过使用简单的 ObjectInput/OutputStream,我可以让它以这种方式保存,但不能加载(通常使用 EOFExcpetion)。有没有一种优雅的方法来保存这样的对象,或者有什么方法可以将对象的 ArrayList 保存到文件中?

【问题讨论】:

  • 使用ObjectOutputStream 保存后,您如何尝试再次加载它?
  • 是的,但效果并不好。
  • 当我尝试使用 ois.readObject(); 加载它时出现 EOFException 错误; (ObjectInputStream)
  • 你能通过 ObjectOutputStream 发布你用来读/写的代码吗?
  • 在生产代码中你可能不想使用serialVersionUID = 1。而是让你 IDE 为你生成一个合适的 ID。

标签: java file-io arraylist


【解决方案1】:

以下作品。我猜你错过了 flush() 或 close()。

public static void main(final String[] args) throws IOException, ClassNotFoundException {
    final ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream("test.out"));
    final Phonebook phonebook = new Phonebook();
    out.writeObject(phonebook);
    out.flush();
    out.close();

    final ObjectInputStream in = new ObjectInputStream(new FileInputStream("test.out"));
    final Object o = in.readObject();
    System.out.println(o);
}

【讨论】:

    【解决方案2】:

    当您希望以标准方式序列化您的 PhonebookEntries 时,其成员本身必须是可序列化的。

    【讨论】:

      【解决方案3】:

      几个不同的问题,我假设编写的代码是示例代码(所以我不会修复它)永远不会填写任何内容,因为您不断释放对象。所以每次添加都会得到 null,null。

      要回答你的问题,不确定它有多优雅,但较短的版本是:

      for (PhonebookEntry pbe : phonebookEntries) {
          System.out.println("Name: " + pbe.getName());
          ....
      }
      

      【讨论】:

      • 我不确定我是否理解 awm 的答案......它与文件 io 无关,但也许我遗漏了一些东西......我正在尝试将整个电话簿对象保存到一个包含所有 PhonebookEntry 对象的文件。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-04
      • 1970-01-01
      • 2011-10-24
      相关资源
      最近更新 更多