2015-12-30 372 views
3

我試圖在我的Mac上運行下面的代碼調用Runtime.getRuntime()。EXEC(命令),始終返回1

String command = "find /XXX/XXX/Documents/test1* -mtime +10 -type f -delete"; 

Process p = null; 
p = Runtime.getRuntime().exec(command); 
p.getErrorStream(); 
int exitVal = p.waitFor(); 

和exitVal始終爲1,也不會刪除這些文件 任何想法??

+0

嘗試使用完整的路徑'find' – Todd

+2

您是否嘗試過閱讀'Process' 'InputStream'或'ErrorStream'?你也應該使用'ProcessBuilder' – MadProgrammer

回答

2

從我的實驗,find將返回1當它未能找到任何結果(find: /XXX/XXX/Documents/test1*: No such file or directory

首先,你應該使用ProcessBuilder,這解決了問題,與包含空格的參數,使用戶能夠重定向輸入/錯誤流以及指定命令的起始位置(如果需要)。

所以,玩了,這樣的事情,似乎爲我(MacOSX的)工作...

ProcessBuilder pb = new ProcessBuilder(
     new String[]{ 
      "find", 
      "/XXX/XXX/Documents/test1", 
      "-mtime", "+10", 
      "-type", "f", 
      "-delete" 
     } 
); 
pb.redirectErrorStream(true); 
try { 
    Process p = pb.start(); 
    InputStream is = p.getInputStream(); 
    int in = -1; 
    while ((in = is.read()) != -1) { 
     System.out.print((char)in); 
    } 
    int exitWith = p.exitValue(); 
    System.out.println("\nExited with " + exitWith); 
} catch (IOException exp) { 
    exp.printStackTrace(); 
} 
+0

這很好用,只是在int之前添加了exitWith = p.exitValue();我添加了p.waitFor()來防止異常。非常感謝 – Asi

相關問題