有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

读取Java中可能被其他进程修改的文件

我想知道如果我尝试读取Java中可能被其他进程修改的文件,会发生什么情况。例如,给定伪代码:

File f = new File("a");

if (f.exists()) {
    // A
    BufferedReader br = new BufferedReader(new FileReader(f));
    // B
    String line = "";

    while ((line = br.readLine() ) != null ) {
        // C
        out.println(line);
    }
}

如果在这些注释位置(A/B/C),文件名被另一个进程更改,会发生什么情况?如果该文件被删除或替换为另一个文件,会有所不同吗?如果实现了不同类型的od文件读取,会不会影响这些


共 (2) 个答案

  1. # 1 楼答案

    您可以而且应该通过删除exists()测试并捕获FileNotFoundException,来消除点A,一旦打开文件,它的名称对您来说并不重要,在某些操作系统上,无法重命名打开的文件。此外,没有理由初始化“line”变量

  2. # 2 楼答案

    如果不同的进程正在接触您的文件,If(f.exists())逻辑将不会对您有多大帮助:当它完成执行时,但在下一行执行之前,结果可能会有所不同

    如果文件的文件名在//A点更改,您将根据FileReader documentation得到一个FileNotFoundException。如果该文件被另一个读者替换,则不应注意

    在这一点之后,您的VM应该可以控制该文件,大多数OSs将阻止其他进程接触该文件

    但是,并发修改文件是个坏主意,应该避免。如果您试图找到一种让两个进程通信的方法,一个常见的选择是使用内存映射文件。同样,另一个解决方案可能会更加合理