在 Java 中調用系統命令 nbtstat -a ip 並捕獲控制台輸出,用於網絡鄰居名稱解析。
public static void main(String[] args) {
Runtime run = Runtime.getRuntime();
try {
Process process = run.exec("nbtstat -a 192.168.1.100"); // 替換目標 IP
// 讀取標準輸出
InputStream in = process.getInputStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(in, "GBK")); // Windows 控制台編碼
String line;
while ((line = reader.readLine()) != null) {
System.out.println(line);
}
in.close();
process.waitFor(); // 等待命令結束
} catch (Exception e) {
e.printStackTrace();
}
}
GBK 或 Cp936,否則中文亂碼。process.getErrorStream() 防止緩衝區阻塞導致進程掛起。nbtstat 位於系統路徑,無需絕對路徑;若調用自定義腳本需寫全路徑。ProcessBuilder 配合線程池實現超時銷毀。public static String execCmd(String cmd, int timeoutMs) throws Exception {
ProcessBuilder pb = new ProcessBuilder("cmd.exe", "/c", cmd);
pb.redirectErrorStream(true); // 合併錯誤流
Process p = pb.start();
// 異步讀取輸出...
// 使用 Future 與 ExecutorService 實現超時
}
掌握 Runtime.exec 與流讀取模式,即可在 Java 中無縫調用任何命令行工具。