从文件中读取列表时抛出异常类

时间:2015-04-28 18:53:56

标签: java serialization casting

我想保存我的科目'在文件中的状态。我有一个主题列表,我把它们写入文件。然后我读回了这个对象。但是当我把它们放到列表中时,我得到了类转换异常。我可以看到该对象返回所有值,但无法将它们转换为列表。

这是我的主题列表

private List<Subject> subjects;

FileOutputStream fileStream = new FileOutputStream("SaveFile", true);
        ObjectOutputStream objectStream = new ObjectOutputStream(fileStream);
        objectStream.writeObject(subjects);  
        objectStream.close();

这是我从文件中读取的代码

FileInputStream inStream = new FileInputStream("SaveFile");
        ObjectInputStream obStream = new ObjectInputStream(inStream);
        List<Subject> newSubjects = (List<Subject>)obStream.readObject();

这是例外

  

java.lang.ClassCastException:[Ljava.lang.Object;无法强制转换为java.util.List       在WebPageUpdateNotifier.Memento.getSavedData(Memento.java:43)       在WebPageUpdateNotifier.Client.run(Client.java:66)       at WebPageUpdateNotifierTest.ClientTest.testGetSubjectList(ClientTest.java:24)       at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)       at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)

我做错了吗?我google了很多,但我发现语法是正确的。 任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:1)

我认为问题是你要附加到文件,而不是写新内容。如果某个对象先前被序列化,然后通过附加到文件序列化List<Subject>,那么在反序列化时,您将获得旧对象。

尝试从FileOutputStream

的构造函数调用中删除boolean参数
FileOutputStream fileStream = new FileOutputStream("SaveFile");

而不是

FileOutputStream fileStream = new FileOutputStream("SaveFile", true);

答案 1 :(得分:-1)

as obStream.readObject();返回Object而不是Object列表。您可以按以下方式准备清单:

List<Subject> newSubjects;
while ((obj = (Subject)objIn.readObject()) != null) {
     newSubjects.add(obj);
}