如何检查文件是否被锁定(由其他应用程序打开)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何检查文件是否被锁定(由其他应用程序打开)相关的知识,希望对你有一定的参考价值。

有一些API允许检查文件是否被另一个程序锁定或打开,因此我的进程无法写入该文件。

例如我们可以用这个:

File f = new File("some-locked-file.txt");
System.out.println(f.canWrite()); // -> true
new FileOutputStream(f); // -> throws a FileNotFoundException

但不能保证这将在100%的情况下起作用。

例如,在我的Windows机器上,如果我正在尝试检查.csv文件,它按预期工作 - 当我用另一个程序打开.csv文件时,我的Java代码将抛出FileNotFoundException,但是没有例外的简单.txt文件打开简单记事本。

有没有简单的方法来检查文件是否以100%的可靠性锁定?

My program exec example.

答案

这结果是一个有趣的问题,我自己尝试了几件事,以下是我的观察:

  • java.io.FileNotFoundException: C:E_Drivehim.csv (The process cannot access the file because it is being used by another process)是否不会抛出将取决于打开文件的编辑器。
  • 如果你在notepad / notepad ++中打开一个txt文件,那么new FileOutputStream(file);不会抛出异常,但如果你从excel打开相同的txt文件,那么new FileOutputStream(file);抛出异常。
  • 我最好的猜测是,可能使用像excel这样的软件,excel将锁定文件并指示相同的操作系统,因此操作系统向JVM指示相同,因此JVM会抛出异常,但这不会发生在像notepad / notepad ++这样的软件上。

所以,我认为真的回答你的问题是“这取决于”。

以上是关于如何检查文件是否被锁定(由其他应用程序打开)的主要内容,如果未能解决你的问题,请参考以下文章

检查未锁定的文件是不是打开

Python:检查文件被锁定

检查文件是不是被进程文件句柄锁定

PHP - 检查 CSV 文件是不是被锁定以供其他用户修改

C: 如何检查电脑是不是被锁定/睡眠?

PHP检查文件是不是被flock()锁定?