首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

Java 執行系統命令獲取輸出:Runtime.exec 實現 nbtstat 查詢

     編輯:程式設計綜合問答

需求

在 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();
    }
}

關鍵點解析

  1. 編碼處理:Windows CMD 默認 GBK,讀取流需指定 GBK 或 Cp936,否則中文亂碼。
  2. 錯誤流:建議同時讀取 process.getErrorStream() 防止緩衝區阻塞導致進程掛起。
  3. 命令路徑:nbtstat 位於系統路徑,無需絕對路徑;若調用自定義腳本需寫全路徑。
  4. 超時控制:生產環境建議使用 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 中無縫調用任何命令行工具。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved