我正在编写一个 java 应用程序,它使用 FileInputStream 每秒读取一个文件(它位于单独线程中的无限循环内,然后 hibernate 1 秒)
该文件已在另一个应用程序中打开。
当我尝试将文件保存在其他应用程序中时,收到一条错误消息,指出该文件正在被其他程序使用。
我阅读了FileLock API,并实现了写入和读取的锁定和释放:
FileOutputStream fos = new FileOutputStream(file);
FileLock fileLock = fos.getChannel().lock();
if (fileLock != null) {
fos.write(fileContent);
fileLock.release();
}
fos.close();
如何禁用两个应用程序正在访问的文件的文件锁定?
谢谢!!
编辑:我正在 WINDOWS 7 上调试
最佳答案
确保始终使用正确的 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
关于java - 如何禁用 Java 应用程序中另一个应用程序打开的文件的文件锁定,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10120417/