如何检查文件是否被锁定(由其他应用程序打开)
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%的可靠性锁定?
答案
这结果是一个有趣的问题,我自己尝试了几件事,以下是我的观察:
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 ++这样的软件上。
所以,我认为真的回答你的问题是“这取决于”。
以上是关于如何检查文件是否被锁定(由其他应用程序打开)的主要内容,如果未能解决你的问题,请参考以下文章