Java使用路径名中的空格执行命令

时间:2011-02-06 23:25:13

标签: java

如何执行路径名中包含空格的Java System(shell)命令?

我尝试过引号和反斜杠(),但它不起作用。

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

4 个答案:

答案 0 :(得分:26)

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

如果使用Runtime.exec(String command),Java只会在空格上拆分命令。

  

命令字符串使用由调用new StringTokenizer(命令)创建的StringTokenizer分解为标记,而不进一步修改字符类别。然后,由tokenizer生成的标记以相同的顺序放置在新的字符串数组cmdarray中。

另见g++: File not found

或使用ProcessBuilder这样的内容:

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

答案 1 :(得分:7)

您真的需要在shell中执行它(例如,您是否需要对~*等内容进行shell扩展?如果没有,您可以直接调用ln

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

如果你真的需要一个shell,试试这个(这可能需要一些调整,具体取决于shell如何处理引号):

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

编辑:

我的印象是第二条路径中有一个字面反斜杠。如果它不应该从上面的字符串文字中删除\\

答案 2 :(得分:1)

这些都不适用于Lion。但是,以下方法确实有效,并且向后兼容Tiger。

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

答案 3 :(得分:0)

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