在java中运行linux命令
问题描述:
我想在java中运行“ls”命令,我的代码是- 注意: - 我正在使用WINDOWS。在java中运行linux命令
import java.io.IOException;
public class Example
{
public void fn()
{
Runtime run = Runtime.getRuntime();
Process p = null;
String cmd = "ls";
try {
p = run.exec(cmd);
p.getErrorStream();
p.waitFor();
} catch (IOException | InterruptedException e) {
e.printStackTrace();
System.out.println("ERROR.RUNNING.CMD");
} finally {
p.destroy();
}
}
public static void main(String[] args) throws IOException
{
Example sp = new Example();
sp.fn();
}
}
,但我得到以下错误,同时运行在Eclipse的
java.io.IOException: Cannot run program "ls": CreateProcess error=2, The system cannot find the file specified
at java.lang.ProcessBuilder.start(Unknown Source)
at java.lang.Runtime.exec(Unknown Source)
at java.lang.Runtime.exec(Unknown Source)
at java.lang.Runtime.exec(Unknown Source)
at Example.fn(Example.java:12)
at Example.main(Example.java:28)
Caused by: java.io.IOException: CreateProcess error=2, The system cannot find the file specified
at java.lang.ProcessImpl.create(Native Method)
at java.lang.ProcessImpl.<init>(Unknown Source)
at java.lang.ProcessImpl.start(Unknown Source)
... 6 more
Exception in thread "main" ERROR.RUNNING.CMD
java.lang.NullPointerException
at Example.fn(Example.java:23)
at Example.main(Example.java:28)
什么需要这个代码加以纠正?我应该添加什么库等来执行这段代码?
答
如果要从Java运行任何命令,请确保该文件的可执行文件存在于PATH
环境变量中。
或者至少您必须将工作目录设置为/usr/bin
或类似。
还有一个解决办法是使用绝对路径的可执行文件,例如: -
Runtime.getRuntime().exec("/usr/bin/ls");
但它是指定的任何文件的绝对路径糟糕的方式。
为什么不使用File#listFiles()
?
'我想在java'中运行“ls”命令你确定吗?因为如果你需要的是系统上的文件列表,这是一个可怕的方式来执行它有多种原因 – Aaron
你如何运行程序上面? – Sanjeev
尝试'run.exec(“bash”,“-c”,“ls”);' – Oneiros