检查文件是否已打开
我需要编写一个自定义批处理文件重命名器。我已经完成了大部分工作,除了我不知道如何检查文件是否已经打开。我只是在使用软件包,并且有一种方法,但这似乎不能测试该文件是否正在被另一个程序使用。关于我如何做到这一点的任何想法?java.io.File
canWrite()
我需要编写一个自定义批处理文件重命名器。我已经完成了大部分工作,除了我不知道如何检查文件是否已经打开。我只是在使用软件包,并且有一种方法,但这似乎不能测试该文件是否正在被另一个程序使用。关于我如何做到这一点的任何想法?java.io.File
canWrite()
使用Apache Commons IO库...
boolean isFileUnlocked = false;
try {
org.apache.commons.io.FileUtils.touch(yourFile);
isFileUnlocked = true;
} catch (IOException e) {
isFileUnlocked = false;
}
if(isFileUnlocked){
// Do stuff you need to do with a file that is NOT locked.
} else {
// Do stuff you need to do with a file that IS locked
}
(问答是关于如何处理Windows“打开文件”的锁...而不是如何移植地实现这种锁定。
整个问题充满了可移植性问题和争用条件:
FileLock
一个更简单但不可移植的解决方案是尝试重命名(或者您正在尝试做的任何事情),并诊断由于打开的文件而引起的返回值和/或任何Java异常。
笔记:
如果使用 API 而不是 API,则在发生故障时将获得更多信息。Files
File
在允许您重命名锁定或打开的文件的系统(例如Linux)上,您不会收到任何失败结果或异常。操作将成功。但是,在这样的系统上,您通常不需要担心文件是否已打开,因为操作系统不会在打开时锁定文件。