如何执行路径名中包含空格的Java System(shell)命令?
我试过把引号和反斜杠(),但它不起作用.
ln -s "dir1/dir2" "my\ dir/dir2"
Run Code Online (Sandbox Code Playgroud)
Mik*_*kel 27
到目前为止,最可靠的方法是使用Runtime.exec(String [] cmdarray).
如果使用Runtime.exec(String命令),Java只会在空格上拆分命令.
使用由调用new StringTokenizer(command)创建的StringTokenizer将命令字符串分解为标记,而不进一步修改字符类别.然后,由标记化器生成的标记以相同的顺序放置在新的字符串数组cmdarray中.
另请参见g ++:找不到文件
或者像这样使用ProcessBuilder:
ProcessBuilder pb = new ProcessBuilder("ln", "-s", "dir1/dir2", "my dir/dir2");
Process p = pb.start();
Run Code Online (Sandbox Code Playgroud)
你真的需要在shell中执行它(例如,你是否需要对诸如~或*等的东西进行shell扩展)?如果没有,您可以ln直接调用:
Process p =
Runtime.getRuntime()
.exec(new String[]{"/bin/ln","-s","dir1/dir2", "my\\ dir/dir2"});
Run Code Online (Sandbox Code Playgroud)
如果你真的需要一个shell,试试这个(这可能需要一些调整,具体取决于shell如何处理引号):
Process p =
Runtime.getRuntime()
.exec(new String[]{"/bin/sh", "-c", "ln -s \"dir1/dir2\" \"my\\ dir/dir2\""});
Run Code Online (Sandbox Code Playgroud)
编辑:
我的印象是第二条路径中有一个字面反斜杠.如果它不应该\\从上面的字符串文字中删除.