Java Runtime.getRuntime().exec(命令)始终返回1
我正试图在我的mac上运行以下代码Java Runtime.getRuntime().exec(命令)始终返回1,java,shell,Java,Shell,我正试图在我的mac上运行以下代码 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,并且不会删除文件 任何想法???根据我的实验,find在找不到任何结
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,并且不会删除文件
任何想法???根据我的实验,
find
在找不到任何结果时将返回1
(find:/XXX/XXX/Documents/test1*:没有这样的文件或目录
)
首先,您应该真正使用ProcessBuilder
,这解决了包含空格的参数问题,允许您重定向输入/错误流以及指定命令的开始位置(如果需要)
所以,玩弄它,像这样的东西,似乎对我有用(MacOSX)
尝试使用
查找的完整路径
您是否尝试过阅读流程的输入流
或错误流
?您还应该使用一个ProcessBuilder
,这在int-exitWith=p.exitValue()之前添加的程序非常有效;我添加了p.waitFor()以防止异常。谢谢
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();
}