在 Java 應用程式中,有時需要呼叫作業系統的原生命令(如 ipconfig、ping、dir 等)並捕獲其輸出結果。Java 提供了 Runtime.getRuntime().exec() 方法來實現這一功能。下面通過一個完整的範例展示如何執行 ipconfig 命令並將結果輸出到控制台。
import java.io.*;
/**
* Java 呼叫 Windows DOS 命令範例
* 執行 ipconfig 命令,並透過 IO 流讀取輸出資訊。
*/
public class RunWindowsCommand {
public static void main(String[] args) {
InputStream ins = null;
// 在 Windows 上執行命令需使用 "cmd.exe /C 命令"
String[] cmd = new String[] { "cmd.exe", "/C", "ipconfig" };
try {
// 執行命令,返回 Process 物件
Process process = Runtime.getRuntime().exec(cmd);
// 獲取命令執行後的標準輸出流
ins = process.getInputStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(ins));
String line;
// 逐行讀取並輸出
while ((line = reader.readLine()) != null) {
System.out.println(line);
}
// 等待命令執行結束,獲取退出碼(0 通常表示成功)
int exitValue = process.waitFor();
System.out.println("退出碼:" + exitValue);
// 關閉輸出流(良好習慣)
process.getOutputStream().close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
cmd.exe /C 作為前綴,後面跟具體命令。process.getInputStream() 獲取的是子進程的標準輸出(對 Java 程式來說是輸入流),必須及時讀取,否則可能導致緩衝區滿而阻塞子進程。process.getErrorStream(),防止錯誤輸出填滿緩衝區。waitFor() 會阻塞當前線程直到子進程結束。若需處理複雜交互或跨平臺兼容性,建議使用 ProcessBuilder 類,它提供了更靈活的環境變量、工作目錄設定以及重定向錯誤流合併到標準輸出的功能(redirectErrorStream(true))。