在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) 

什么需要这个代码加以纠正?我应该添加什么库等来执行这段代码?

+7

'我想在java'中运行“ls”命令你确定吗?因为如果你需要的是系统上的文件列表,这是一个可怕的方式来执行它有多种原因 – Aaron

+0

你如何运行程序上面? – Sanjeev

+0

尝试'run.exec(“bash”,“-c”,“ls”);' – Oneiros

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

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

还有一个解决办法是使用绝对路径的可执行文件,例如: -

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

但它是指定的任何文件的绝对路径糟糕的方式。

为什么不使用File#listFiles()