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

标签 java file inputstream

我正在编写一个 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/

相关文章:

java - 按行分隔符将字符串拆分为列表?

java - 如何判断读取结束

java - 文件读取失败且没有明确原因 - Java

java - 无法接收服务器完整响应

c# - 如何将数字写入文件并使其在 Java 和 C# 之间可读

java - NetBeans - 如何将面板移动到新文件(代码太大)

java - 文件下载时出错

java - 帮我将使用字节的 Java 代码转换为 jython 代码

c - 为什么“while(!feof(file))”总是错误的?

java - 如何读取文本文件中字符串数据的特定位置