2009-10-12 44 views
4

我們的一位客戶正在使用一些Novel安全軟件,該軟件有時會鎖定我們軟件創建的一些.class文件。當這種情況發生時,這會對他們造成一些令人討厭的問題,並且我正試圖研究一種解決方法,我們可以添加到我們的錯誤處理中以解決此問題。我想知道是否有可用於檢測文件是否被鎖定的java api中的任何調用,如果是,則解鎖它。使用java API鎖定和解鎖文件

+1

你是什麼意思「鎖定文件」?你的意思是軟件使用.class文件,所以它們不能更改?或者你的意思是像羊羣(2)? – abyx 2009-10-12 17:36:02

回答

1

在嘗試寫入文件之前,您可以使用File.canWrite()檢查您的Java應用程序是否可以寫入該文件。但是,如果第三方應用程序將文件鎖定在File.canWrite()檢查與應用程序實際嘗試寫入之間,您仍可能遇到問題。出於這個原因,我會編寫你的應用程序來簡單地繼續並嘗試寫入文件並捕獲文件被鎖定時引發的任何異常。我不相信有一種本地Java方式來解鎖已被另一個應用程序鎖定的文件。你可以將一個shell命令作爲特權用戶來執行,但是這看起來不夠優雅。

0

File.canWrite()具有Asaph提到的競態條件。您可以嘗試FileChannel.lock()並獲取文件的排他鎖。只要.class位於本地磁盤上,這應該可以正常工作(文件鎖定可能會在聯網磁盤上出現問題)。

或者,根據發現的.class名稱的方式,您可以每次爲.class創建一個新名稱;那麼如果防病毒軟件鎖定了您的初始班級,您仍然可以創建新的班級。