如何执行路径名中包含空格的Java系统(shell)命令?
我试过加引号和反斜杠(),但不起作用。
ln -s "dir1/dir2" "my\ dir/dir2"发布于 2011-02-07 07:34:33
到目前为止,最可靠的方法是使用[Runtime.exec(String[]命令)](http://download.oracle.com/javase/1.5.0/docs/api/java/lang/Runtime.html#exec(java.lang.String[]%29)。
如果您使用Runtime.exec(String command),Java只在空格上拆分命令。
在不进一步修改字符类别的情况下,使用调用
StringTokenizer (命令)创建的新命令将命令字符串分解为标记。然后,由记号赋予器产生的记号以相同的顺序放置在新的字符串数组cmdarray中。
或者使用ProcessBuilder,如下所示:
ProcessBuilder pb = new ProcessBuilder("ln", "-s", "dir1/dir2", "my dir/dir2");
Process p = pb.start();发布于 2011-02-07 07:36:34
你真的需要在外壳中执行它吗(例如,你需要外壳扩展~或*之类的东西吗)?如果没有,您可以直接调用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\""});编辑:
我的印象是第二条路径中有一个字面上的反斜杠。如果它不应该从上面的字符串文字中删除\\。
发布于 2012-03-26 21:43:00
这些对Lion都不起作用。但是,下面的代码确实可以工作,并且向后兼容Tiger。
Runtime.getRuntime().exec(new String[]{"/bin/bash","-c","/path/to/file/space*init"});https://stackoverflow.com/questions/4916918
复制相似问题