2013-03-12 132 views
1

我正在嘗試使applet以非常頻繁的間隔(每秒幾次)讀取本地文件系統(用戶計算機)上的文件,然後通過javascript將該文件的內容提供給網頁。在閱讀文件之前檢查文件是否打開?

小程序需要讀取的文件由用戶計算機上的程序以高頻率更新。我擔心的是,如果applet在文件正在更新時讀取文件中的數據,可能會發生什麼情況。

我不知道這是多麼可能,但如果這是一個有效的擔憂,有沒有辦法確保該文件在讀取之前未被寫入?

+0

我的感覺是,直到你不保存文件的磁盤將有舊的副本,並將其將讀取較舊的文件。 – kaysush 2013-03-12 02:06:25

+0

@SuKu - 用戶計算機上運行的程序會以高頻率覆蓋文件的內容。這是我的擔心。我想知道applet是否可以在被覆蓋的過程中讀取文件。 – Nate 2013-03-12 02:11:18

+0

你可以閱讀文件,只要你沒有得到一個例外,那個文件已經被使用了,如果你讀了一些舊文件,你就沒有任何問題。 – kaysush 2013-03-12 02:15:26

回答

1

它的非常怪物讓這樣的磁盤訪問,任何方式嘗試套接字,如果你可以或者如果你再次坐回試圖鎖定文件的兩端,如果其中一個鎖定失敗,然後確保其他鎖定,使了這個你使用

File file = new File(fileName); 
FileChannel channel = new RandomAccessFile(file, "rw").getChannel(); 
// Get an exclusive lock on the whole file 
FileLock lock = channel.lock(); 
try { 
    lock = channel.tryLock(); 
    // Ok. You get the lock 
} catch (OverlappingFileLockException e) { 
    // File is open by other end 
} finally { 
    lock.release(); 
}