【发布时间】:2012-04-12 08:57:36
【问题描述】:
我正在编写一个 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 上调试
【问题讨论】:
-
为什么要禁用代码显式获取的锁?此外,如果在读取端正确释放了锁,这应该不是问题。不过,您应该使用正确的成语进行锁定(try-catch-finally)。
-
我想禁用锁定,因为我正在监视另一个文件正在使用的外部文件。
-
该文件是否总是被锁定?如果是,则在尝试写入之前通过调用 f.canWrite(); 检查您是否可以写入;方法?
-
这让我很困惑...您说您从代码中读取一个文件,并展示了一个写入文件的代码示例.我假设这意味着您可以控制两个应用程序的代码。所以你真正的问题是你的阅读代码锁定了文件,但你不希望它吗?
-
我仍然建议@nume 使用正确的习惯用法,以确保始终释放获取的文件锁。没有它,如果你只写了一次失败并出现异常并且没有达到解锁文件的代码,那么该文件将永远保持锁定状态,直到重新启动或某些实用程序解锁它。
标签: java file inputstream