Java 删除前检查文件或文件夹是否已打开 如何在尝试删除文件/文件夹之前检查其是否已打开
我正在以编程方式删除它。。删除前,需要检查其是否已打开Java 删除前检查文件或文件夹是否已打开 如何在尝试删除文件/文件夹之前检查其是否已打开,java,Java,我正在以编程方式删除它。。删除前,需要检查其是否已打开 我想要这样的东西 if(file/folder is open){ //do not delete it }else{ //delete it } 我尝试了以下两组代码,但都不起作用 File scrptFile=new File(dirFile); boolean isFileUnlo
if(file/folder is open){
//do not delete it
}else{
//delete it
}
我尝试了以下两组代码,但都不起作用
File scrptFile=new File(dirFile);
boolean isFileUnlocked = false;
try {
org.apache.commons.io.FileUtils.touch(scrptFile);
isFileUnlocked = true;
} catch (IOException e) {
isFileUnlocked = false;
}
if(isFileUnlocked){
// Do stuff you need to do with a file that is NOT locked.
System.out.println("file is not locked");
} else {
// Do stuff you need to do with a file that IS locked
System.out.println("file is locked");
}
File file = new File(dirFile);
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
System.out.println("Ok. You get the lock");
} catch (OverlappingFileLockException e) {
// File is open by someone else
System.out.println("File is open by someone else");
} finally {
lock.release();
}
您可以使用Apache commons io api
boolean flagFileNotInUse = false;
try {
org.apache.commons.io.FileUtils.touch(yourFile);
flagFileNotInUse = true;
} catch (IOException e) {
flagFileNotInUse = false;
}
//然后检查flagFileNotInUse的值
flagFileNotInUse = true, means file not in use
flagFileNotInUse = false, means file in use
这是一个有趣的想法,但考虑到文件锁依赖于操作系统(并且在某些操作系统下有多种不同的方法),可能很难以清晰的方式确定。最好的办法是尝试。如果文件#delete由于某种原因无法删除该文件,则返回false。您可以检查一下,如果您将bool flagFileNotInUse命名或交换标志的值,是否会更清楚?@rferwarda:请参阅更新的帖子。上述代码适用于文件夹,但不适用于File@DarkKnight