我的Java程序想要读取一个文件,该文件可以被写入其中的另一个程序锁定.我需要检查文件是否被锁定,如果是,请等待它是免费的.我该如何实现这一目标?
Java程序在Windows 2000服务器上运行.
Vla*_*lad 33
应该在Windows中工作:
File file = new File("file.txt");
boolean fileIsNotLocked = file.renameTo(file);
Run Code Online (Sandbox Code Playgroud)
jar*_*bjo 14
在使用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
Run Code Online (Sandbox Code Playgroud)
这是相当奇怪的,但如果您不将平台独立性计算得太高而系统显示相同的行为,则可以将它们放在一个实用程序函数中.
与当前的Java版本,不幸的是没有办法有关文件状态变化被告知,所以如果你需要等到文件可写,你现在想尽再检查其他进程已经发布了其锁定.我不确定,但是使用Java 7,可能会使用新的WatchService来了解这些更改.