2012-05-23 32 views
13
Process p = Runtime.getRuntime().exec(command); 
    is = p.getInputStream(); 
    byte[] userbytes = new byte[1024]; 
    is.read(userbytes); 

我想在java的linux os中執行一個shell命令。但pmd報告說不要使用java Runtime.exec()。爲什麼?是什麼原因 ? Runtime.exec()有沒有其他選擇?爲什麼要避免在java中使用Runtime.exec()?

+2

pmd什麼消息正好顯示? – Tudor

+0

問題描述:不要使用Runtime.exec()來執行 執行命令 – kannanrbk

+1

這是一個荒謬的說法,絕對沒有後盾 – ControlAltDel

回答

33

除非您被困在古老的JVM中,否則java.lang.ProcessBuilder可以更容易地指定進程,設置其環境,產生它並處理其文件描述符。

該類用於創建操作系統進程。每個ProcessBuilder實例管理一組進程屬性。方法start()使用這些屬性創建一個新的Process實例。可以從同一個實例重複調用start()方法,以創建具有相同或相關屬性的新子進程。

...

啓動它使用默認的新進程的工作目錄和環境很簡單:

Process p = new ProcessBuilder("myCommand", "myArg").start(); 

這裏是啓動與修改工作目錄和環境啓動進程的例子:

ProcessBuilder pb = new ProcessBuilder("myCommand", "myArg1", "myArg2"); 
Map<String, String> env = pb.environment(); 
env.put("VAR1", "myValue"); 
env.remove("OTHERVAR"); 
env.put("VAR2", env.get("VAR1") + "suffix"); 
pb.directory(new File("myDir")); 
Process p = pb.start(); 
+1

謝謝邁克。 ProcessBuilder在我的案例中表現出色。比使用Runtime.exec()更容易。更多信息和示例,請訪問http://docs.oracle.com/javase/6/docs/api/java/lang/ProcessBuilder.html – tremendows

相關問題