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

时间:2018-03-05 14:46:25

标签: java io

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

e.g。我们可以用这个:

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代码将抛出{{1但是,使用简单的记事本打开的普通FileNotFoundException文件没有例外。

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

My program exec example.

1 个答案:

答案 0 :(得分:0)

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

  • 是否不会抛出java.io.FileNotFoundException: C:\E_Drive\him.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会抛出异常,但这不会发生在软件上像记事本/记事本++。

所以,我认为你问题的真正答案是"它取决于"。