2013-03-26 22 views
0

我正在試圖通過Java使用的ProcessBuilder運行sed命令時,命令IOException異常:IOException異常而乳寧的bash通過的ProcessBuilder

ERROR: java.io.IOException: Cannot run program "sed -i 's/hello world//g' 
/home/user/test": error=2, No such file or directory 

的命令是sed -i 's/hello world//g' /home/user/test 但問題是,沒有命令,我可通過終端運行相同的命令,它會刪除字符串「Hello World」

public void removeString(String str, String file) throws IOException { 
    String command = "sed -i \'s/" + str + "//g\' " + file; 
    System.out.println(command); 
    ProcessBuilder pb = new ProcessBuilder(command); 
    Process p = pb.start(); 
} 

是什麼原因造成的過程中無法找到該文件?

+0

您可以嘗試使用其完整路徑運行sed二進制文件。 – Snicolas 2013-03-26 20:58:02

回答

3

ProcessBuilderexpects individual arguments to be sent separately在構造函數中。嘗試像這樣運行它:

ProcessBuilder pb = new ProcessBuilder("sed", "-i", "s/hello world//g", "/home/user/test"); 

(你也可以傳遞一個List<String>如果你想)

它以這種方式工作,以防止shell injection安全漏洞。

+0

這個技巧。謝謝。 – Aboutblank 2013-03-26 21:01:00