我正在創建一個用於打開和編輯xml文件的簡單應用程序。 這些文件位於由應用程序的多個實例訪問的本地文件夾中。 我想要做的是鎖定應用程序實例打開的每個文件,以便其他實例無法訪問它。Java文件鎖定機制(FileLock等)的問題
要做到這一點我使用下面的代碼:
函數void READFILE(){
File xmlFile = new File("myFile.xml");
RandomAccessFile raf = new RandomAccessFile(xmlFile, "rw");
FileLock fl = raf.getChannel().tryLock();
if(fl==null){
System.out.println("file already locked by another instance");
}else{
setCurrentFile(raf);
setLock(fl);
System.out.println("file successfully locked by this instance");
}
}
因爲我想保留文件上的鎖被編輯的時間我不會關閉raf也不會釋放fl。
此時嘗試訪問鎖定文件的任何其他應用程序實例都無法執行此操作。到現在爲止還挺好。
我觀察到以下怪事:
如果獲取該文件上的鎖後,我打開同一個文件一個FileInputStream,即使的FileLock對象仍然有效(isValid方法返回true)的,其他實例該應用程序現在可以訪問正在編輯的文件。
我覺得這種行爲很奇怪。 任何人都可以解釋爲什麼會發生這種情況?
我希望以上是有道理的。 在此先感謝!
WIndows? Linux呢?蘋果系統?文件鎖定實際上是一項OS功能。 – bmargulies 2010-03-19 17:20:13
我已經在MacOS和WindowsXP上測試過了。我意識到不同的底層操作系統可能會導致鎖定過程的影響。但我認爲它與OS沒有任何關係。謝謝! – KostasT 2010-03-19 17:45:31