用Java调用Linux终端:如何刷新输出?

时间:2010-07-12 19:31:12

标签: java linux terminal flush

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在终端中写入文件?

提前致谢 E.E。

2 个答案:

答案 0 :(得分: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
}

答案 1 :(得分:0)

您可以等待完成此过程:

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

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