2011-02-06 92 views
15

如何執行在路徑名中有空格的Java系統(shell)命令?Java使用路徑名中的空格執行命令

我試過把引號和反斜槓(),但它不起作用。

ln -s "dir1/dir2" "my\ dir/dir2" 
+0

`「我的\目錄/ DIR2」`是不是在Java中有效的字符串,因爲`「\」`是不是有效的轉義序列。試試`「我的\\ dir/dir2」`。 – 2011-02-06 23:26:26

+0

不,這是我打印字符串時的輸出。我已經在使用「\\」 – LanguagesNamedAfterCofee 2011-02-06 23:27:39

回答

24

到目前爲止最可靠的方法是使用Runtime.exec(String[] cmdarray)

如果您使用Runtime.exec(String command),則Java僅將命令拆分爲空白。

命令串被分成使用由呼叫新的StringTokenizer(命令)與字符類別無需進一步修改創建的StringTokenizer令牌。令牌生成器生成的令牌隨後以相同的順序放置在新的字符串數組cmdarray中。

又見g++: File not found

或者使用ProcessBuilder是這樣的:

ProcessBuilder pb = new ProcessBuilder("ln", "-s", "dir1/dir2", "my dir/dir2"); 
Process p = pb.start(); 
6

你真的需要一個shell來執行它(例如,你需要外殼的事情擴張像~*等)?如果沒有,你可以直接調用ln

Process p = 
    Runtime.getRuntime() 
    .exec(new String[]{"/bin/ln","-s","dir1/dir2", "my\\ dir/dir2"}); 

如果你真的需要一個shell,試試這個(這可能需要一點點的調整取決於殼如何處理引號):

Process p = 
    Runtime.getRuntime() 
    .exec(new String[]{"/bin/sh", "-c", "ln -s \"dir1/dir2\" \"my\\ dir/dir2\""}); 

編輯:

我的印象是第二個路徑中有一個文字反斜槓。如果它不應該從上面的字符串文字中刪除\\

1

這些都不適用於Lion。但是,以下方法確實有效,並且向後兼容Tiger。

Runtime.getRuntime().exec(new String[]{"/bin/bash","-c","/path/to/file/space*init"}); 
0

您可以通過以下方式來使用它,而無需引入任何反斜線: Runtime.getRuntime().exec(new String[]{"ln", "-s", "dir1/dir2", "my dir/dir2"});

相關問題