Runtime.getRuntime().exec(command) 总是返回1

4
我正在尝试在我的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();

退出值始终为1,并且不会删除文件。有什么想法吗?

尝试使用find的完整路径。 - Todd
2
你尝试过读取ProcessInputStreamErrorStream吗?同时,你应该使用ProcessBuilder - MadProgrammer
1个回答

4

通过我的实验,当find无法找到任何结果时(find: /XXX/XXX/Documents/test1*: No such file or directory),将会返回1

首先,您应该真正使用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();
}

1
这非常有效,只需在 "int exitWith = p.exitValue();" 之前添加"p.waitFor()" 来防止异常。非常感谢。 - Asi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接