檢查文件是否已打開我需要寫一個(gè)自定義批文件重命名器。我已經(jīng)完成了大部分工作,但我不知道如何檢查文件是否已經(jīng)打開。我只是用java.io.File包,還有一個(gè)canWrite()方法,但這似乎并不測試該文件是否正在被另一個(gè)程序使用。有什么辦法讓我做到這一點(diǎn)嗎?
3 回答

郎朗坤
TA貢獻(xiàn)1921條經(jīng)驗(yàn) 獲得超9個(gè)贊
您可以嘗試使用FileLock,但操作系統(tǒng)和/或文件系統(tǒng)不一定支持它。 在Windows上,如果另一個(gè)應(yīng)用程序以特定方式打開文件,則可能無法使用FileLock。 即使你真的設(shè)法用 FileLock
或者其他問題,您仍然會(huì)遇到這樣的問題,即在測試文件和重命名之間可能會(huì)有一些東西出現(xiàn)并打開文件。
如果您使用 Files
API而不是 File
API在發(fā)生故障時(shí)將獲得更多信息。 在允許重命名已鎖定或打開的文件的系統(tǒng)(例如Linux)上,您不會(huì)獲得任何失敗結(jié)果或異常。手術(shù)會(huì)成功的。但是,在這樣的系統(tǒng)上,您通常不需要擔(dān)心文件是否已經(jīng)打開,因?yàn)椴僮飨到y(tǒng)不會(huì)鎖定打開的文件。

呼如林
TA貢獻(xiàn)1798條經(jīng)驗(yàn) 獲得超3個(gè)贊
// TO CHECK WHETHER A FILE IS OPENED // OR NOT (not for .txt files) // the file we want to check String fileName = "C:\\Text.xlsx"; File file = new File(fileName); // try to rename the file with the same name File sameFileName = new File(fileName); if(file.renameTo(sameFileName)){ // if the file is renamed System.out.println("file is closed"); }else{ // if the file didnt accept the renaming operation System.out.println("file is opened"); }
添加回答
舉報(bào)
0/150
提交
取消