如何读取文件但避免错误" java.io.IOException:进程无法访问该文件,因为另一个进程锁定了一部分"?

时间:2017-09-13 04:21:59

标签: java file locking

首先,我检查了java.io.IOException: The process cannot access the file because another process has locked a portion - when using IOUtils.copyLarge() in Windows。我的问题不是要查找文件是否打开。

我有一个Java应用程序 A ,它正在将日志文件写入磁盘。在给定时间,有大量文件由 A 写入和关闭,少数文件仍然打开,并且由 A 编写。

我有第二个Java应用程序 B ,它有时需要读取日志,而且确实如此。但问题是,如果文件是由 A 打开的, B 将溢出错误 java.io.IOException:进程无法访问该文件,因为另一个进程锁定了一部分

B 读取文件的代码如下所示:

void readFile(Path filePath) {
    FileInputStream fis = new FileInputStream(filePath.toFile());

    byte[] buffer = new byte[1024]
    for (int len; (len = fis.read(buffer)) != -1) {
        // do things with the read bytes
    }
}

我无法控制应用 A 的代码。我也无法确定应用程序 A 何时会释放该文件。它可能超过24小时。所以我需要 B 来打开文件(如果它可以完成)。

但我可以更改 B 的代码。 有什么方法可以更改上面的代码,以便 B 可以读取锁定文件的内容吗?请注意 B 只需要读访问权限到文件。

0 个答案:

没有答案