为什么我收到以下错误:
Exception in thread "main" java.io.IOException: Cannot run program "cd": error=2, No such file or directory
at java.lang.ProcessBuilder.start(ProcessBuilder.java:1048)
at com.terminal.Main.main(Main.java:20)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:483)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:134)
Caused by: java.io.IOException: error=2, No such file or directory
at java.lang.UNIXProcess.forkAndExec(Native Method)
at java.lang.UNIXProcess.<init>(UNIXProcess.java:187)
at java.lang.ProcessImpl.start(ProcessImpl.java:134)
at java.lang.ProcessBuilder.start(ProcessBuilder.java:1029)
... 6 more
这是我正在使用的代码:
Runtime.getRuntime().exec("cd ~/");
Process pwd = Runtime.getRuntime().exec("pwd");
try (Scanner scanner = new Scanner(pwd.getInputStream())) {
while (scanner.hasNextLine()) {
System.out.println(scanner.nextLine());
}
}
当我尝试执行其他命令时,例如sudo
或./
,再次发生IOException
......
问题是什么?任何想法的人?
谢谢:)
答案 0 :(得分:0)
正如阿加德所说,cd不是程序,它是一个shell命令。要更改exec()调用的工作目录,请使用three argument method:
try {
File wd = new File("~/");
Process pwd = Runtime.getRuntime().exec("pwd", null, wd);
Scanner scanner = new Scanner(pwd.getInputStream());
while (scanner.hasNextLine()) {
System.out.println(scanner.nextLine());
}
}
catch (Exception e) {
System.out.println(e.getMessage());
}
您可能已经注意到,此代码仍会返回错误,因为使用代字号作为对主目录的引用是另一个shell优点。你可以替换&#34;〜/&#34;使用主目录,或者更可能的情况是未知,您可以使用以下代码获取目录:
try {
String homedir = System.getProperty("user.home");
File wd = new File(homedir);
Process pwd = Runtime.getRuntime().exec("pwd", null, wd);
Scanner scanner = new Scanner(pwd.getInputStream());
while (scanner.hasNextLine()) {
System.out.println(scanner.nextLine());
}
}
catch (Exception e) {
System.out.println(e.getMessage());
}
如果您打算运行这样的多个命令,我建议您按照上面的链接尝试使用支持多个命令的其他方法之一。