【问题标题】:Lock Properties File in JavaJava中的锁定属性文件
【发布时间】:2010-09-05 21:30:10
【问题描述】:

我正在使用 java 属性文件构造。一开始我阅读它是为了填充一个对话框,但我也让用户能够更改对话框中的值并单击保存。这导致我调用属性文件的 setProperty 方法。现在,由于这个 webapp 可以存在于多个浏览器上,所有浏览器都更改同一个文件,所以我希望能够在我使用“保存”方法时“锁定”属性文件。我怎样才能做到这一点?我见过类似的关于 FileLock 的问题,但我不确定这是否适用于属性文件构造。每个“setProperty”都是不同的写法吗?

谢谢!

【问题讨论】:

  • 网络应用程序?多个浏览器?这听起来像是人们转而使用数据库和适当的事务管理的时候。

标签: java file-io properties locking


【解决方案1】:

setProperty 仅更新属性集,不写入文件。您必须调用store(OutputStream out, String header) 方法才能将文件实际写入磁盘,这就是您必须“锁定”文件的时间。

您可以使用FileLock 来防止多个用户同时写入文件,但是,每次您的用户要保存时,您都需要从磁盘重新加载属性文件,更改属性,然后写入再次返回文件,所有这些都没有释放文件锁定,以确保没有保存过时的数据。

【讨论】:

  • 我不清楚您的意思是什么:“但是,每次您的用户想要保存时,您都需要从磁盘重新加载属性文件,更改属性,然后再次写回文件,所有这些都没有释放文件锁,以确保没有保存过时的数据。”
  • 如果两个用户同时修改 [不同] 属性,并且第一个用户保存了更改,第二个用户将不会获得新的属性。因此,当第二个用户保存文件时,先前保存的更改将被丢弃(覆盖)。要解决此问题,用户必须重新加载文件、应用所做的更改并保存文件。
  • 因此,为了“写入”属性文件,我必须先锁定,然后加载属性文件,然后执行所有 setProperty,然后执行 store(),然后执行 RELEASE。对吗?
猜你喜欢
  • 1970-01-01
  • 2019-01-15
  • 2016-06-19
  • 1970-01-01
  • 1970-01-01
  • 2012-09-14
  • 2015-10-18
  • 2014-12-10
  • 1970-01-01
相关资源
最近更新 更多