2

我正在编写一个 java 应用程序,它使用 FileInputStream 每秒读取一个文件(它在一个单独的线程中的无限循环内,然后休眠 1 秒)

该文件在另一个应用程序中打开。

当我尝试将文件保存在另一个应用程序中时,我收到一条错误消息,指出该文件正在被另一个程序使用。

我阅读了 FileLock API,并在写入和读取时实现了锁定和释放:

FileOutputStream fos = new FileOutputStream(file);
FileLock fileLock = fos.getChannel().lock();
if (fileLock != null) {
    fos.write(fileContent);
    fileLock.release();
}
fos.close();

如何禁用 2 个应用程序正在访问的文件的文件锁定?

谢谢!!

编辑:我在 WINDOWS 7 上调试

4

2 回答 2

1

这取决于您的操作系统。我认为 Windows 是唯一支持锁的操作系统。尝试下载解锁器。我认为没有纯 Java 方法可以实现这一点。

于 2012-04-12T08:59:32.563 回答
1

确保您始终使用正确的 try-finally 惯用语释放您获得的锁。这是我在生产中的代码,我们在 Windows 7 上没有问题:

OutputStream os = openFile();
try {
  if (os.getChannel().tryLock() == null) return;
  ... write to the file ...
}
finally { os.close(); } // this automatically releases the lock
于 2012-04-12T09:56:32.427 回答