Использование Java для вызова терминала Linux: как очистить вывод? - PullRequest
5 голосов
/ 12 июля 2010

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

Ответы [ 2 ]

2 голосов
/ 12 июля 2010

Эта проблема вызвана асинхронной природой Runtime.exec .foo выполняется в отдельном процессе.Вам нужно вызвать Process.waitFor () , чтобы убедиться, что файл записан.

0 голосов
/ 12 июля 2010

Вы можете подождать завершения процесса:

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

Или используйте p.getInputStream () для чтения непосредственно из стандартного вывода процесса.

...