Java ObjectOutputStream建议
我的程序的目标是在关闭时保存,在打开时重新加载 我有一个驱动程序(包含所有的图形),我希望它创建并保存一个文件。我在互联网上看过很多教程,但它们没有解释如何在实际程序中正确实现这个系统 我是否在main方法中创建OutputStrema?我是否需要检查文件是否已创建,如果未创建,是否从中读取?我如何完成这一切?我应该有一个WindowListener用于退出,以便它可以保存所有数据吗Java ObjectOutputStream建议,java,objectoutputstream,Java,Objectoutputstream,我的程序的目标是在关闭时保存,在打开时重新加载 我有一个驱动程序(包含所有的图形),我希望它创建并保存一个文件。我在互联网上看过很多教程,但它们没有解释如何在实际程序中正确实现这个系统 我是否在main方法中创建OutputStrema?我是否需要检查文件是否已创建,如果未创建,是否从中读取?我如何完成这一切?我应该有一个WindowListener用于退出,以便它可以保存所有数据吗 谢谢是的,WindowListener听起来是个好主意。保存程序状态的一种方法是使用。请看一下上面链接的教程。我
谢谢是的,WindowListener听起来是个好主意。保存程序状态的一种方法是使用。请看一下上面链接的教程。我不知道该为你的“图形”推荐什么。请告诉我们更多关于你在这里的意思的细节 编辑 我是否在main方法中创建OutputStrema 你的问题是,在主方法中创建OutputStream是询问我们一无所知的程序结构。我的直觉告诉我,我不会在main方法中创建这样的东西,即使JFrame是在那里创建的(或者在从main调用的静态方法中)。OutputStream将在实现WindowListener的类中创建,这可以是它自己的独立类。您希望使主方法尽可能小 我是否需要检查文件是否已创建,如果未创建,是否从中读取 可能吧。这个问题围绕着一旦创建了存储的信息,您将如何处理这些信息。也许你们会在程序启动时搜索并阅读它?我不知道,因为这完全取决于你的需要,有些事情你必须弄清楚 我如何完成这一切?我应该有一个WindowListener用于退出,以便它可以保存所有数据吗 如果这是一个Swing应用程序,那么是的,WindowListener将帮助您控制应用程序的关闭 我是否在main方法中创建OutputStrema 最好在保存状态的位置创建流 当我的程序运行时,它将接收保存的数据文件及其ObjectInputStream。我是否将实现这一点的代码放在我的主方法中 听起来是个不错的选择。基本上,在尝试做需要这些数据的事情之前,您需要这样做。任何实现这一点的方法都会起作用(尽管使用静态初始化是个坏主意…) 我是否需要检查文件是否已创建,如果未创建,是否从中读取 这个问题混淆了写状态文件和读状态文件。它们发生在生命周期中的不同点,并使用不同的代码来完成任务 在创建一个保存文件之前,没有必要检查它是否存在。。。除非您打算重命名现有的保存文件 相反,如果启动应用程序时不存在保存文件,则尝试打开该文件的构造函数将抛出
FileNotFoundException
。只需捕获异常并跳过读取已保存状态的代码
。。。如果尚未创建文件,是否会导致错误
对。FileNotFoundException;见上文。因此,您的代码必须处理这个问题,或者在尝试在中打开之前测试文件是否存在;请参阅File.exists()
和相关方法
我应该有一个WindowListener用于退出,以便它可以保存所有数据吗
这听起来是解决方案的一部分。(但是程序崩溃或被终止的情况又如何呢?在这些情况下,您想保存状态……还是不想?)
有几件事需要注意:
- 许多与GUI相关的对象没有实现可序列化的
,因此无法使用
保存。线程、流、套接字和其他一些东西也不能序列化ObjectOutputStream
- 当您使用
保存类的实例,更改类或它们的名称,然后尝试使用ObjectOutputStream
重新加载它们时,您可能会遇到问题,因为保存的实例与类的新版本不匹配。如果您必须能够读取序列化状态,那么您就有麻烦了ObjectInputStream
main()
方法永远都不是正确的答案。好吧,我很抱歉假设您了解我项目的每一个细节。我确实有一个非常具体的想法,我想完成什么。所以这里是我的新问题:当我的程序运行时,它将接收保存的数据文件及其ObjectInputStream。我是否将实现这一点的代码放在我的主方法中?如果我这样做了,如果还没有创建文件,这会导致错误吗?