如何使用ProcessBuilder设置工作目录

38

我试图在我的Ubuntu家目录中启动一个进程。但是我一直收到"Permission denied"的异常,而我不知道为什么。以下是代码:

Process p = null;
ProcessBuilder pb = new ProcessBuilder("/home");
p = pb.start();

这里是异常信息:

Exception in thread "main" java.io.IOException: Cannot run program "/home": 

java.io.IOException: error=13, Permission denied
        at java.lang.ProcessBuilder.start(ProcessBuilder.java:475)
        at tester.Main.main(Main.java:30)
Caused by: java.io.IOException: java.io.IOException: error=13, Permission denied
        at java.lang.UNIXProcess.<init>(UNIXProcess.java:164)
        at java.lang.ProcessImpl.start(ProcessImpl.java:81)
        at java.lang.ProcessBuilder.start(ProcessBuilder.java:468)
        ... 1 more
Java Result: 1
1个回答

88
你正在尝试执行 /home,但它不是可执行文件。进程构建器的 constructor 参数是要执行的命令。
你想设置工作目录。你可以通过 directory 方法来实现。
下面是一个完整的示例:
Process p = null;
ProcessBuilder pb = new ProcessBuilder("do_foo.sh");
pb.directory(new File("/home"));
p = pb.start();

好的,谢谢。我刚刚编辑了问题,因为我意识到自己犯了个错误。我想你也可能已经回答了我的另一个问题。 - Eric
1
为了使其正常工作,我不得不使用 ProcessBuilder pb = new ProcessBuilder(new String[]{"sh","do_foo.sh"});。 - Volokh
我不得不使用"sh -c ...":Process process = new ProcessBuilder(['sh', '-c', "zip -r /tmp/$orderId /tmp/$orderId/".toString()])(这是Groovy语法) - Jose Quijada

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