如何執行在路徑名中有空格的Java系統(shell)命令?Java使用路徑名中的空格執行命令
我試過把引號和反斜槓(),但它不起作用。
ln -s "dir1/dir2" "my\ dir/dir2"
如何執行在路徑名中有空格的Java系統(shell)命令?Java使用路徑名中的空格執行命令
我試過把引號和反斜槓(),但它不起作用。
ln -s "dir1/dir2" "my\ dir/dir2"
到目前爲止最可靠的方法是使用Runtime.exec(String[] cmdarray)。
如果您使用Runtime.exec(String command),則Java僅將命令拆分爲空白。
命令串被分成使用由呼叫新的StringTokenizer(命令)與字符類別無需進一步修改創建的StringTokenizer令牌。令牌生成器生成的令牌隨後以相同的順序放置在新的字符串數組cmdarray中。
或者使用ProcessBuilder是這樣的:
ProcessBuilder pb = new ProcessBuilder("ln", "-s", "dir1/dir2", "my dir/dir2");
Process p = pb.start();
你真的需要一個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\""});
編輯:
我的印象是第二個路徑中有一個文字反斜槓。如果它不應該從上面的字符串文字中刪除\\
。
這些都不適用於Lion。但是,以下方法確實有效,並且向後兼容Tiger。
Runtime.getRuntime().exec(new String[]{"/bin/bash","-c","/path/to/file/space*init"});
您可以通過以下方式來使用它,而無需引入任何反斜線: Runtime.getRuntime().exec(new String[]{"ln", "-s", "dir1/dir2", "my dir/dir2"});
`「我的\目錄/ DIR2」`是不是在Java中有效的字符串,因爲`「\」`是不是有效的轉義序列。試試`「我的\\ dir/dir2」`。 – 2011-02-06 23:26:26
不,這是我打印字符串時的輸出。我已經在使用「\\」 – LanguagesNamedAfterCofee 2011-02-06 23:27:39