5

1) 我正在使用 Java 调用 Linux 终端来运行 foo.exe 并将输出保存在一个文件中:

    String[] cmd = {"/bin/sh", "-c", "foo >haha.file"};
    Runtime.getRuntime().exec(cmd);

2)问题是当我打算稍后在代码中读取haha.file时,它还没有写出来:

File f=new File("haha.file"); // return true
in = new BufferedReader(new FileReader("haha.file"));
reader=in.readLine();
System.out.println(reader);//return null

3)只有在程序完成后才会写入haha.file。我只知道如何刷新“作家”,但不知道如何刷新某事。像这样。如何强制 java 在终端中写入文件?

提前感谢 EE

4

2 回答 2

2

这个问题是由Runtime.exec的异步特性引起的。 foo正在一个单独的过程中执行。您需要调用Process.waitFor()以确保文件已被写入。

String[] cmd = {"/bin/sh", "-c", "foo >haha.file"};
Process process = Runtime.getRuntime().exec(cmd);
// ....
if (process.waitFor() == 0) {
    File f=new File("haha.file");
    in = new BufferedReader(new FileReader("haha.file"));
    reader=in.readLine();
    System.out.println(reader);
} else {
    //process did not terminate normally
}
于 2010-07-12T19:41:16.683 回答
0

您可以等待该过程完成:

Process p = Runtime.getRuntime().exec(cmd);
int result = p.waitFor();

或者使用 p.getInputStream() 直接从进程的标准输出中读取。

于 2010-07-12T19:38:09.507 回答