[英]ObjectOutputStream Advice
我的程序的目标是在关闭时保存它,并在打开时重新加载。
我有一个驱动程序(包含所有图形),我希望它创建和保存文件。 我在互联网上看过很多教程,但他们无法解释的是如何在实际程序中正确实现这个系统。
我在main方法中创建OutputStrema吗? 我是否需要检查文件是否已创建,如果没有创建,是否从中读取? 我如何完成所有这些? 我应该有一个WindowListener用于退出,以便它可以保存所有数据吗?
谢谢
是的,WindowListener听起来不错。 保存程序状态的一种方法是使用Properties 。 请查看上面链接的教程。 我不确定为你的“图形”推荐什么。 请告诉我们更多有关您的意思的详细信息。
编辑
我在main方法中创建OutputStrema吗?
你有问题在main方法中创建OutputStream是在询问我们一无所知的程序结构。 我的直觉告诉我,我不会在main方法中创建这样的东西,即使在那里创建了JFrame(或者在从main调用的静态方法中)。 OutputStream将在实现WindowListener的类中创建,这可以是它自己的独立类。 您希望使main方法尽可能小。
我是否需要检查文件是否已创建,如果没有创建,是否从中读取?
有可能。 这个问题围绕着您创建时存储信息的内容。 也许你会搜索它并在程序启动时阅读它? 我不知道这一切都取决于你的需求,你必须要弄清楚。
我如何完成所有这些? 我应该有一个WindowListener用于退出,以便它可以保存所有数据吗?
如果这是一个Swing应用程序,那么是的,WindowListener将帮助您控制应用程序的关闭。
我在main方法中创建OutputStrema吗?
最好在保存状态的位置创建流。
当我的程序运行时,它将使用其ObjectInputStream接收保存的数据文件。 我是否在我的Main方法中使用代码完成此操作?
听起来是个不错的选择。 基本上,在尝试执行需要该数据的操作之前,您需要执行此操作。 实现这一目标的任何东西都可以工作(虽然使用静态初始化做这件事是个坏主意......)
我是否需要检查文件是否已创建,如果没有创建,是否从中读取?
这个问题令人困惑, 写入状态文件并阅读它。 它们出现在生命周期的不同点,并使用不同的代码来完成任务。
除非您建议重命名现有的保存文件,否则在创建保存文件之前没有必要检查是否存在保存文件。
相反,如果启动应用程序时不存在保存文件,则尝试打开它的构造函数将抛出FileNotFoundException
。 只需捕获异常并跳过读取已保存状态的代码。
...如果还没有创建文件,这会导致错误吗?
是。 一个FileNotFoundException; 往上看。 所以你的代码必须处理它,或者在尝试打开之前测试文件是否存在; 请参阅File.exists()
和相关方法。
我应该有一个WindowListener用于退出,以便它可以保存所有数据吗?
这听起来像解决方案的一部分。 (但是程序崩溃或被杀的情况怎么样?你想在这些情况下保存状态......还是没有?)
有几点需要注意:
许多与GUI相关的对象不实现Serializable
,因此无法使用ObjectOutputStream
进行保存。 线程,流,套接字和其他一些东西也无法序列化。
当您使用ObjectOutputStream
保存类的实例时,更改类或它们的名称,然后尝试使用ObjectInputStream
重新加载它们,您可能会遇到与保存的实例不匹配的新版本的问题。 如果您必须能够读取该序列化状态,则表示您遇到了麻烦。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.