2010-09-05 112 views
0

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

谢谢!

+1

Webapp?多个浏览器?这听起来像是人们转而使用数据库和正确的事务管理的时间。 – 2010-09-05 22:22:49

回答

0

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

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

+0

我不清楚你的意思是什么:“但是,每次用户想要保存时,您都需要从磁盘重新加载属性文件,更改属性并重新写入文件,所有这些都不释放文件锁定,以确保没有陈旧的数据被保存。“ – NewImageUser 2010-09-05 21:52:09

+1

如果两个用户同时修改[不同]属性,并且第一个用户保存其更改,则第二个用户不会获取新属性。因此,当第二个用户保存文件时,先前保存的更改将被丢弃(覆盖)。要解决此问题,用户必须重新加载文件,应用所做的更改并保存文件。 – Lajnold 2010-09-05 22:17:56

+0

因此,为了“写入”属性文件,我将不得不LOCK然后加载属性文件,然后做所有我的setProperty然后做我的商店(),然后RELEASE。正确? – NewImageUser 2010-09-05 22:35:23