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。
答案 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()直接从过程的标准输出中读取。