在尝试以编程方式删除文件之前,如何检查文件是否已打开?
这样的事情
if (file is open){
// close it first
}
// delete file
Run Code Online (Sandbox Code Playgroud)
我认为这不会奏效,原因有几个。
如果您已经打开了一个文件,则没有用于测试的标准 Java 机制。
即使有这样的机制,也很难找到文件的句柄来关闭它。
即使您可以找到文件句柄,也存在潜在的竞争条件,即一个线程测试文件并尝试删除它,而第二个线程打开文件句柄。
这些都没有解决其他一些进程打开文件的情况。
如果您在删除应用程序打开的文件时遇到问题,那么很可能真正的问题是您的应用程序正在泄漏文件描述符。最好的解决方案是找到并修复泄漏……或者确保使用“try / finally”或新的Java 7“try with resource”构造关闭所有文件流等。
另一方面,如果该文件是由其他某个进程打开的,那么您不妨尝试删除该文件,而无需测试它是否已打开。如果删除成功,则成功。否则检测失败并执行任何您检测到文件已打开时会执行的操作。
| 归档时间: |
|
| 查看次数: |
14480 次 |
| 最近记录: |