我想保存我的科目'在文件中的状态。我有一个主题列表,我把它们写入文件。然后我读回了这个对象。但是当我把它们放到列表中时,我得到了类转换异常。我可以看到该对象返回所有值,但无法将它们转换为列表。
这是我的主题列表
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了很多,但我发现语法是正确的。 任何帮助将不胜感激。
答案 0 :(得分:1)
我认为问题是你要附加到文件,而不是写新内容。如果某个对象先前被序列化,然后通过附加到文件序列化List<Subject>
,那么在反序列化时,您将获得旧对象。
尝试从FileOutputStream
:
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);
}