扫描仪不读取 ProcessBuilder 创建的第二个文件

Scanner does not read the second file created by ProcessBuilder

它应该打印文件列表(在 file1 中)和当前进程(在 file2 中)。但是,它只在控制台(终端)中打印文件 1 中的内容。我检查了 file2 中的内容,它具有预期的内容,但它没有在控制台(终端)中打印 file2 中的内容。此外,another.hasNext() 始终为假。任何人都可以帮我解决这个问题吗? 这是我的代码:

    File file1 = new File("1.txt");
    ProcessBuilder pb1 = new ProcessBuilder("ls");
    pb1.redirectOutput(file1);
    pb1.start();
    Scanner s = new Scanner(file1);
    while(s.hasNext()) {
        System.out.println(s.next());
    }
    System.out.println("_____________________________");
    File file2 = new File("2.txt");
    pb1 = new ProcessBuilder("ls");
    pb1.redirectOutput(file2);
    pb1.start();
    Scanner another = new Scanner(file2);
    while(another.hasNext()) {
        System.out.println(another.next());
    }

ProcessBuilder 将启动一个新进程到 运行 命令(ls),它是异步的。

您可以使用waitFor等待进程完成执行:

    pb1.redirectOutput(file1);
    pb1.start().waitFor();
    ...
    pb1.redirectOutput(file2);
    pb1.start().waitFor();