2009-04-27 137 views
30

我試圖很便宜,並在Java中執行本地系統命令(uname -a)。我期待從uname獲取輸出並將其存儲在字符串中。這樣做的最好方法是什麼?當前代碼:如何使用Java執行系統命令(linux/bsd)

public class lame { 

    public static void main(String args[]) { 
     try { 
      Process p = Runtime.getRuntime().exec("uname -a"); 
      p.waitFor(); 
      BufferedReader reader = new BufferedReader(new InputStreamReader(p.getInputStream())); 
      String line=reader.readLine(); 

      while (line != null) {  
       System.out.println(line); 
       line = reader.readLine(); 
      } 

     } 
     catch(IOException e1) {} 
     catch(InterruptedException e2) {} 

     System.out.println("finished."); 
    } 
} 

回答

53

你的方式是不遠處從什麼我可能會做的事:你願意,當然取其例外

Runtime r = Runtime.getRuntime(); 
Process p = r.exec("uname -a"); 
p.waitFor(); 
BufferedReader b = new BufferedReader(new InputStreamReader(p.getInputStream())); 
String line = ""; 

while ((line = b.readLine()) != null) { 
    System.out.println(line); 
} 

b.close(); 

句柄。

+2

你介意將`b.Close()`改爲`b.close()`嗎?我會編輯它,但我需要更改「至少六個」字符。 (除非你的編輯也受到這種限制) – 2014-10-09 18:53:03

+1

@AndrewBreksa:完成!感謝您收到錯字:) – 2014-10-09 19:17:27

+1

`沒問題。 :) – 2014-10-09 20:15:21

2

你在做什麼看起來很好。如果您的命令僅返回單個字符串,則不需要while循環,只需將reader.readLine()值存儲在單個String變量中即可。

另外,你可能應該對這些例外做些事情,而不是隻是吞下它們。

7

這是最好的辦法。 您也可以使用具有可變參數的構造函數的ProcessBuilder,這樣你可以節省一兩行代碼