2011-02-06 57 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"});

相关问题