如何执行在路径名中有空格的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