2015-12-30 4 views
3

я пытаюсь запустить следующий код на мой макинтош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, это решает проблемы с параметрами, которые содержат пробелы, позволяет перенаправлять ввод/error, а также указать начальную позицию команды (если она вам понадобится).

Так, играя с ним, что-то вроде этого, казалось, работал для меня (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

Смежные вопросы