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