我的程序的目标是让它在关闭时保存,打开时重新加载。
我有一个驱动程序(它包含所有的图形),我希望它能够创建和保存一个文件。我在互联网上见过很多教程,但他们没有解释的是如何在实际的程序中正确地实现这个系统。
我是否在我的主要方法中创建OutputStrema?我是否需要检查是否已经创建了一个文件,如果没有创建一个文件,如果是这样的话,从它读取吗?我该如何完成所有这一切?我应该有一个退出的WindowListener,这样它才能保存所有的数据吗?
谢谢
发布于 2012-05-27 00:46:33
是的,WindowListener听起来是个好主意。保存程序状态的一种方法是使用属性。请看上面的教程。我不知道该为你的“图形”推荐什么。请告诉我们更多关于你在这里的意思的细节。
编辑
我是否在我的主要方法中创建OutputStrema?
您的问题是在主要方法中创建OutputStream的问题是询问程序结构,而我们对此一无所知。我的直觉告诉我,我不会在main方法中创建这样的东西,即使JFrame是在那里创建的(或者是在main调用的静态方法中)。OutputStream将在实现WindowListener的类中创建,这可以是它自己的独立类。您希望使主方法尽可能小。
我是否需要检查是否已经创建了一个文件,如果没有创建一个文件,如果是这样的话,从它读取吗?
有可能。这个问题的核心是,一旦创建了存储的信息,您将如何处理。也许你会在程序启动时搜索并阅读它?我不知道,因为这一切都取决于你的需要,一些你必须想清楚的事情。
我该如何完成所有这一切?我应该有一个退出的WindowListener,这样它才能保存所有的数据吗?
如果这是一个Swing应用程序,那么是的,WindowListener将帮助您控制应用程序的关闭。
发布于 2012-05-27 01:52:50
我是否在我的主要方法中创建OutputStrema?
最好是在保存状态的地方创建流。
当我的程序运行时,它将接收保存的数据文件及其ObjectInputStream。我是否将完成这一任务的代码放在我的主要方法中?
听起来是个不错的选择。基本上,在尝试做一些需要这些数据的事情之前,您需要这样做。任何能做到这一点的东西都会起作用(尽管使用静态初始化是个坏主意.)
我是否需要检查是否已经创建了一个文件,如果没有创建一个文件,如果是这样的话,从它读取吗?
这个问题令人费解地编写状态文件并读取它。它们发生在生命周期的不同点,并使用不同的代码来执行任务。
在创建保存文件之前,没有必要检查保存文件是否存在.除非建议重命名现有的保存文件。
相反,如果启动应用程序时不存在保存文件,那么尝试打开该文件的构造函数将抛出一个FileNotFoundException。只需捕获异常并跳过读取保存状态的代码。
..。如果还没有创建文件,这会导致错误吗?
是。A FileNotFoundException;见上文。因此,您的代码必须处理这个问题,或者在尝试打开之前测试该文件是否存在;请参阅File.exists()和相关方法。
我应该有一个退出的WindowListener,这样它才能保存所有的数据吗?
这听起来像是解决方案的一部分。(但程序崩溃或死亡的情况又如何呢?你想在这种情况下拯救国家吗..。还是不?)
有几件事要提防:
Serializable,因此不能使用ObjectOutputStream保存.线程、流、套接字和其他一些东西也不能序列化。ObjectOutputStream保存类实例,更改类或它们的名称,然后尝试使用ObjectInputStream重新加载它们时,如果保存的实例与类的新版本不匹配,则可能会遇到问题。如果您必须能够读取序列化状态,那么您就有麻烦了。https://stackoverflow.com/questions/10770844
复制相似问题