如何使用Java锁定文件(如果可能)

半生命:

我有一个使用FileReader打开文件的Java进程。如何防止另一个(Java)进程打开该文件,或者至少通知第二个进程该文件已打开?如果文件已打开(这解决了我的问题),这是否使第二个进程自动获得异常?还是我必须在第一个进程中使用某种标记或参数来显式打开该文件?

澄清:

我有一个Java应用程序,其中列出了一个文件夹并打开列表中的每个文件进行处理。它依次处理每个文件。每个文件的处理包括读取文件并根据内容进行一些计算,大约需要2分钟。我也有另一个Java应用程序,它执行相同的操作,但写在文件上。我想要的是能够同时运行这些应用程序,这样情况就可以这样。ReadApp列出文件夹并查找文件A,B,C。它将打开文件A并开始读取。WriteApp列出该文件夹并查找文件A,B,C。它打开文件A,看到已打开(通过异常或其他方式),然后转到文件B。ReadApp完成了文件A,然后继续到B。打开并继续到C。WriteApp不能 在ReadApp读取同一文件时进行写入,反之亦然。它们是不同的过程。

汤姆·霍顿-铲子:

FileChannel.lock可能就是您想要的。

try (
    FileInputStream in = new FileInputStream(file);
    java.nio.channels.FileLock lock = in.getChannel().lock();
    Reader reader = new InputStreamReader(in, charset)
) {
    ...
}

(免责声明:代码未编译,并且肯定未经过测试。)

请注意FileLockAPI文档中标题为“平台依赖项”的部分

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章