一尘不染

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

java

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

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


阅读 460

收藏
2020-02-26

共1个答案

一尘不染

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

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