2012-04-12 88 views
2

我正在寫一個Java應用程序,每秒使用FileInputStream讀取一個文件(它在一個單獨的線程中的無限循環內,然後睡1秒)如何禁用Java應用程序中的另一個應用程序打開的文件的文件鎖定

該文件在另一個應用程序中打開。

當我嘗試在另一個應用程序中保存該文件時,出現錯誤消息表明該文件正在被另一個程序使用。

我讀的FileLock API,並實現鎖和寫作和閱讀發行:

FileOutputStream fos = new FileOutputStream(file); 
FileLock fileLock = fos.getChannel().lock(); 
if (fileLock != null) { 
    fos.write(fileContent); 
    fileLock.release(); 
} 
fos.close(); 

如何禁用文件鎖在文件2個應用程序訪問?

謝謝!

編輯:我在WINDOWS 7上調試

+1

爲什麼要禁用代碼明確獲取的鎖定?另外,如果鎖在讀取端正確地放置,這應該不成問題。儘管(try-catch-finally),你應該使用正確的成語來鎖定。 – 2012-04-12 09:02:34

+0

我想禁用鎖,因爲我正在監視另一個文件正在使用的外部文件。 – nurxyz 2012-04-12 09:04:36

+0

該文件是否始終鎖定?如果是,那麼通過調用f.canWrite()來檢查在寫入之前是否可以寫入;方法? – Phani 2012-04-12 09:05:03

回答

1

確保您始終使用正確的試用成語來釋放您獲得的鎖定。這是我在生產中的代碼,我們在Windows 7上沒有問題:

OutputStream os = openFile(); 
try { 
    if (os.getChannel().tryLock() == null) return; 
    ... write to the file ... 
} 
finally { os.close(); } // this automatically releases the lock 
+0

謝謝!這是問題 – nurxyz 2012-04-12 10:34:07

1

這取決於您的操作系統。我認爲Windows是唯一支持鎖的操作系統。嘗試下載Unlocker。我認爲沒有一種純粹的Java方法來實現這一點。

+0

感謝您的回答!所以你認爲沒有辦法取消文件鎖定。但我該如何避免創建它呢?如何管理我的文件I \ O,以便在另一個應用嘗試訪問文件時不鎖定文件?謝謝!!! – nurxyz 2012-04-12 09:03:32

+0

據我所知,在Windows中是不可能的。但我不得不承認,我不是文件鎖的專家:)也許別人可能會提供幫助。 – 2012-04-12 09:07:33

+0

通過調用f.canWrite()來檢查;方法在嘗試寫入之前。 – Phani 2012-04-12 09:08:29

相關問題