如何在Java应用程序中禁用由另一个应用程序打开的文件的文件锁定

时间:2012-04-12 08:57:37

标签: java file inputstream

我正在编写一个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上调试

2 个答案:

答案 0 :(得分:1)

这取决于您的操作系统。我认为Windows是唯一支持锁的操作系统。尝试下载Unlocker。我认为没有纯Java方法来实现这一目标。

答案 1 :(得分: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