在java中运行linux命令

时间:2017-03-07 16:22:00

标签: java linux

我想跑" ls" java中的命令和我的代码是 -  注意: - 我正在使用WINDOWS。

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)

需要纠正的是什么?应该添加哪些库来执行这段代码?

1 个答案:

答案 0 :(得分:3)

如果要从Java运行任何命令,请确保PATH环境变量中存在此文件的可执行文件。

或者至少你必须将工作目录设置为/usr/bin或类似。

另一个解决方案是使用绝对路径来执行,例如:

Runtime.getRuntime().exec("/usr/bin/ls");

但是指定任何文件的绝对路径是不好的方法。

为什么不使用File#listFiles()