检查文件是否已经打开

9 浏览
0 Comments

检查文件是否已经打开

我需要编写一个自定义的批量文件重命名器。我已经完成了绝大部分工作,只是不知道如何检查文件是否已经被打开。我只是使用了 java.io.File 包,并且有一个 canWrite() 方法,但似乎不能测试文件是否被另一程序使用。你有什么想法可以让这个工作吗?

admin 更改状态以发布 2023年5月21日
0
0 Comments

这个问答是关于如何处理Windows的“打开文件”锁定问题……而不是如何在不同平台上实现这种锁定。

这个问题涉及到可移植性问题和竞态条件:

  • 你可以尝试使用FileLock,但并不一定支持你的操作系统和/或文件系统。
  • 似乎在Windows上,如果另一个应用程序以特定的方式打开了文件,你可能无法使用FileLock
  • 即使你成功使用了FileLock或其他东西,你仍然面临一个问题,就是在你测试文件并重命名之间,有可能会有其他东西进来打开文件。

一个更简单但非可移植的解决方案是尝试重命名(或你正在尝试的任何其他操作),并诊断返回值和/或由于打开的文件而出现的任何Java异常。

注意:

  1. 如果你使用Files API而不是File API,当出现失败情况时,你将获得更多的信息。

  2. 在允许重命名锁定或打开文件的系统(例如Linux)上,你将不会获得任何失败结果或异常。操作将成功进行。但是,在这种系统上,你通常不需要担心文件是否已经打开,因为操作系统不会在打开文件时锁定文件。

0
0 Comments

使用Apache Commons IO库...\n

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
}

0