所以这是我的问题: 对于一个项目,我必须创建一个自定义链表,我必须向其添加节点,并使用序列化将其保存/加载到磁盘 在定义问题之前,这里有一些关于我的系统的事情
问题是,每次我加载编程环境并想查看列表时,我发现文件中的列表是“空的”,并且不包含上次添加/删除内容时的记录。
我添加记录并修改列表 - 随着其他类的工作变得简单易行 - 一旦添加了这些记录,我就会调用print函数,它只显示列表中的所有项目,并且很好。
然而,当我关闭环境时,它们会丢失,当我重新打开环境再次查看列表时,它是空的!
在查看保存这些类的文件夹时,我注意到每次运行程序时都会创建'shells'并保持在那里直到程序关闭/完成,但是'listData.ser'应该有保存的链表没有任何数据。
同样,密码文件包含保存良好的密码 - 所以我对我的代码无效的原因感到有些困惑。
这是我的保存列表方法:
private static void saveListToFile(SinglyLinkedList lst) {
try {
ObjectOutputStream os = new ObjectOutputStream(new FileOutputStream("ListData.ser"));
os.writeObject(lst);
os.flush();
os.close();
}
catch (FileNotFoundException e) {
e.printStackTrace();
}
catch (IOException e) {
e.printStackTrace();
}
}
同样,加载列表方法类似,但使用对象输入流和文件输入流。
有什么建议吗?
P.S。我的主要while循环超过400行代码,因此无法发布。
更新1。 加载列表方法中的反序列化代码:
private static SinglyLinkedList loadListFromFile() {
SinglyLinkedList lst = null;
try {
ObjectInputStream is = new ObjectInputStream(new FileInputStream("ListData.ser"));
lst = (SinglyLinkedList) is.readObject();
is.close();
}
catch(FileNotFoundException e) {
e.printStackTrace();
}
catch(IOException e) {
e.printStackTrace();
}
catch(ClassNotFoundException e) {
e.printStackTrace();
}
return lst;
}
我不认为单链表类本身就是问题(对评论的回应),复制是不可行的,因为它也是超过300行代码(很多方法)。
答案 0 :(得分:0)
编写完文件/对象后,您是否尝试在close()
上调用FileOutputStream
?
答案 1 :(得分:0)
我已经解决了,而不是发布我的代码,我试图自己做。我发现列表类有一些静态方法 - 这些方法已更改为非静态方法,现在列表每次都按预期方式保存。 谢谢你的帮助