在尝试删除文件之前检查文件是否已打开

div*_*ivz 5 java

在尝试以编程方式删除文件之前,如何检查文件是否已打开?

这样的事情

if (file is open){
    // close it first
}

// delete file
Run Code Online (Sandbox Code Playgroud)

Ste*_*n C 5

我认为这不会奏效,原因有几个。

  1. 如果您已经打开了一个文件,则没有用于测试的标准 Java 机制。

  2. 即使有这样的机制,也很难找到文件的句柄来关闭它。

  3. 即使您可以找到文件句柄,也存在潜在的竞争条件,即一个线程测试文件并尝试删除它,而第二个线程打开文件句柄。

  4. 这些都没有解决其他一些进程打开文件的情况。

如果您在删除应用程序打开的文件时遇到问题,那么很可能真正的问题是您的应用程序正在泄漏文件描述符。最好的解决方案是找到并修复泄漏……或者确保使用“try / finally”或新的Java 7“try with resource”构造关闭所有文件流等。

另一方面,如果该文件是由其他某个进程打开的,那么您不妨尝试删除该文件,而无需测试它是否已打开。如果删除成功,则成功。否则检测失败并执行任何您检测到文件已打开时会执行的操作。