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 が書き込まれます。「Writers」をフラッシュする方法しか知りませんが、sth をフラッシュする方法はわかりません。このような。Javaにターミナルでファイルを強制的に書き込むにはどうすればよいですか?

よろしくお願いします。

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 に答える