下面是我從控制臺讀取輸出的代碼。我需要實時讀取 tracert 路徑到控制臺。
下面的代碼僅在完成程序后立即列印資料。
有人能幫我嗎?
ProcessBuilder f = new ProcessBuilder("cmd.exe","tracert ip_address");
Process p = f.start();
BufferedReader reader = new BufferedReader(new InputStreamReader(p.getInputStream()));
BufferedReader readers = new BufferedReader(new InputStreamReader(p.getErrorStream()));
String lines =null;
System.out.println();
while((lines = reader.readLine())!=null) {
System.out.println("lines:" lines);
}
String lines1 =null;
while((lines1 = readers.readLine())!=null) {
System.out.println("error lines:" lines1);
}
uj5u.com熱心網友回復:
以下是一些應該會有所幫助的建議。
您不需要使用 CMD.EXE 來啟動 TRACERT.EXE,因為如果它在路徑上或完全限定它的路徑,您可以直接運行它。如果您確實使用 CMD,則使用“/C”標志以確保它僅運行該命令。
String ip = "bbc.com";
String [] cmd = {"cmd.exe", "/c", "tracert " ip};
System.out.println("Running:" Arrays.toString(cmd));
如果寫入大量資料,在同一執行緒中使用 STDOUT 和 STDERR 會導致行程凍結。使用檔案重定向,或重定向 ERR->OUT:
ProcessBuilder f = new ProcessBuilder(cmd);
f.redirectErrorStream(true);
Process p = f.start();
不要浪費時間在輸出上回圈,new ByteArrayOutputStream()如果要捕獲它,請發送到 a ,或者只是System.out:
try(var stdout = p.getInputStream()) {
stdout.transferTo(System.out);
}
始終等待行程結束:
int rc = p.waitFor();
System.out.println("Exit:" p.pid() " RESULT:" rc ' ' (rc == 0 ? "OK":"**** ERROR ****"));
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/324625.html
