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

我如何执行一个在path名中有空格的Java系统(shell)命令?

我试过把引号和反斜杠(),但它不工作。

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

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

如果使用Runtime.exec(String命令) ,则Java仅将命令分割为空白。

命令string被使用由新的StringTokenizer(命令)调用创build的StringTokenizer分解为令牌,而不需要进一步修改字符类别。 然后将令牌生成器生成的令牌以相同的顺序放置在新的string数组cmdarray中。

另请参阅g ++:文件未find

或者像这样使用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,试试这个(这可能需要一点调整,取决于shell如何处理引号):

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

编辑:

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

这些在狮子工作都没有。 但是,下面的工作,并向后兼容老虎。

 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"});