2016-12-18 31 views
0

這是一臺Linux機器,下面的代碼不會導致任何輸出,我很好奇爲什麼。 P.S. - 我沒有閱讀關於需要轉義的代字號,但是在任何情況下都用反斜槓和javac指出了語法錯誤。Runtime.getRuntime().exe(「ls〜」)沒有列出主目錄的內容

import java.io.IOException; 
import java.io.BufferedReader; 
import java.io.InputStreamReader; 

class Run { 
    public static void main(String args[]) throws IOException { 
     Process p = Runtime.getRuntime().exec("ls ~"); 
     BufferedReader br = new BufferedReader(new InputStreamReader(p.getInputStream())); 
     String line; 

     while ((line = br.readLine()) != null) { 
      System.out.println(line); 
     } 
    } 
} 
+1

'〜'由外殼插做到這一點。 – chrylis

+0

'Process process = Runtime.getRuntime()。exec(new String [] {「/ bin/sh」,「-c」,「ls〜」});'調用你的shell並在傳遞之前展開'〜'它到'ls'。 – teppic

+0

另請參見[當Runtime.exec()不會](http://www.javaworld.com/article/2071275/core-java/when-runtime-exec---won-t.html)很多很好的有關正確創建和處理過程的提示。然後忽略它是指'exec'並使用'ProcessBuilder'來創建進程。還要將'String arg'分解爲'String [] args'來解釋包含空格字符的路徑。 –

回答

1

這是因爲~被shell的路徑替換爲您的主目錄的路徑。你沒有使用shell。相反,它就像你跑ls '~',這給出了錯誤:

ls: cannot access '~': No such file or directory 

事實上,你可以看到只是當你改變這種情況發生p.getInputStream()p.getErrorStream(),這使你的程序的輸出:

ls: cannot access '~': No such file or directory 
1

你需要~由shell插入以獲取home文件夾,而不是您可以從系統屬性中讀取user.home,如

Process p = Runtime.getRuntime().exec("ls " + System.getProperty("user.home")); 

你也可以用ProcessBuilder

ProcessBuilder pb = new ProcessBuilder("ls", System.getProperty("user.home")); 
pb.inheritIO(); 
try { 
    pb.start().waitFor(); 
} catch (InterruptedException e) { 
    e.printStackTrace(); 
} 
相關問題