检查文件是否在 Java 中锁定

2022-09-01 09:28:04

我的Java程序想要读取一个文件,该文件可以被写入其中的另一个程序锁定。我需要检查文件是否被锁定,如果是这样,请等到它可用。如何实现此目的?

Java 程序在 Windows 2000 服务器上运行。


答案 1

应该在Windows中工作:

File file = new File("file.txt");
boolean fileIsNotLocked = file.renameTo(file);

答案 2

在带有Sun的JVM的Windows下,FileLocks应该可以正常工作,尽管JavaDocs的可靠性相当模糊(依赖于系统)。

但是,如果您只需要在Java程序中识别出其他程序正在锁定文件,则不必与FileLocks斗争,而只需尝试写入文件,如果文件被锁定,它将失败。您最好在实际系统上尝试此操作,但我看到以下行为:

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

这很奇怪,但是如果你不把平台独立性计算得太高,并且你的系统表现出相同的行为,你可以把它放在一个实用程序函数中。

使用当前的Java版本,不幸的是,没有办法被告知文件状态的更改,所以如果你需要等到文件可以写入,你必须不时地尝试检查其他进程是否已经释放了它的锁。我不确定,但是使用Java 7,可以使用新的WatchService来了解这些更改。


推荐