我正在使用java属性文件来存储一些配置信息,对象创建我正在加载此信息,然后在对象生命周期中的某些时间点我想覆盖属性文件中的值以便下次这种类型的对象被实例化时,它被配置为当前信息。 setProperty方法似乎没有这样做,当我使用存储方法时,它只是将一个新的(更新的)文件副本附加到原始文件的末尾。有任何想法吗?通过覆盖属性文件来保存状态
感谢
我正在使用java属性文件来存储一些配置信息,对象创建我正在加载此信息,然后在对象生命周期中的某些时间点我想覆盖属性文件中的值以便下次这种类型的对象被实例化时,它被配置为当前信息。 setProperty方法似乎没有这样做,当我使用存储方法时,它只是将一个新的(更新的)文件副本附加到原始文件的末尾。有任何想法吗?通过覆盖属性文件来保存状态
感谢
setProperty
肯定不会自动执行此操作(除非你使用自己的类型将覆盖它)。
store
应该没问题 - 但我的猜测是你打开一个输出流(或作家)来追加而不是覆盖。你是否一直在打开输出流?或者也许你正在使用new FileOutputStream(path, true)
这会追加?没有向我们展示任何代码,很难知道你做错了什么。
正如WizardOfOdds所说,preferences API首先可能是一个更好的主意。
我保持输出流始终打开。我应该为每个覆盖创建一个新的? – Aly 2010-02-07 20:57:24
@Aly:我会的。一般来说,在小型工作单元中打开/写入/关闭是一个好主意,这样大部分时间你都没有打开的文件句柄。 – 2010-02-07 21:04:36
为什么不尝试序列化对象并在需要时保存它们? 使用可序列化的对象,您可以随时保存对象的状态。下一次当你想加载它时,你可以从文件中读取它并用这个值初始化对象... 检查这个网站: http://java.sun.com/j2se/1.4.2/docs/guide/serialization/index.html
在你的情况下使用Preferences API ? http://java.sun.com/javase/6/docs/api/java/util/prefs/Preferences.html – SyntaxT3rr0r 2010-02-07 20:47:58