将非字符串对象的ArrayList写入文件

时间:2011-12-07 14:36:22

标签: java file-io arraylist

编辑:我解决了问题,我忘了关闭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保存到文件中?

3 个答案:

答案 0 :(得分:0)

以下作品。我猜你错过了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);
}

答案 1 :(得分:0)

如果您希望以标准方式序列化您的电话簿条目,其成员必须自行序列化。

答案 2 :(得分:-1)

一些不同的问题,编写的代码,我假设是一个示例代码(所以我不打算修复它)永远不会填写任何东西,因为你不断发布对象。所以你最终会得到null,每次添加都为null。

要回答你的问题,不确定它有多么睿智,但更短的版本是:

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