在Java ProcessBuilder
提供一種方式來執行外部操作系統命令和管的輸入和從外部命令讀取輸出。這裏是做一個樣本:
List<String> command = new ArrayList<String>();
command.add("/path/to/Blockland.exe");
command.add("Other arguments");
ProcessBuilder procBuilder = new ProcessBuilder(command);
Process proc = procBuilder.start();
ProcessOutputReader outputReader =
new ProcessOutputReader(proc.getInputStream());
ProcessOutputReader errorReader =
new ProcessOutputReader(proc.getErrorStream());
Thread out = new Thread(outputReader);
out.start();
Thread error = new Thread(errorReader);
error.start();
proc.waitFor();
哪裏ProcessOutputReader
是實現Runnable
類。它從構造函數中提供的流開始讀取,直到文件結束髮生在流中。這是可以讀取輸出並處理它的線程。請注意,您必須使用單獨的線程處理流,因爲java/OS爲子進程提供的緩衝區是有限的。如果子進程開始在數據流中輸入太多的數據(錯誤/輸出)並且緩衝區變滿,它將掛起。
例如,它可能看起來像(執行不完整):
public class ProcessOutputReader
{
public void run()
{
int ch;
try
{
BufferedReader reader = new BufferedReader(new InputStreamReader(inpStream));
// The output can be of any size. So read in chunks
String line = reader.readLine();
while(line != null)
{
// handle line
line = reader.readLine();
}
}
catch (Exception e)
{
// handle exceptions
}
}
}
如果你說//處理輸出,我想知道你怎麼可以按行 – Pacnet
這些數字字符轉換成可讀的字符串,行如果你想逐行閱讀,你可以使用'BufferedInputStream'。編輯我的答案來反映這一點。 – Venkat