2017-03-07 182 views
0

我想在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

回答

3

如果要從Java運行任何命令,請確保該文件的可執行文件存在於PATH環境變量中。

或者至少您必須將工作目錄設置爲/usr/bin或類似。

還有一個解決辦法是使用絕對路徑的可執行文件,例如: -

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

但它是指定的任何文件的絕對路徑糟糕的方式。

爲什麼不使用File#listFiles()