2010-09-05 113 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