题
在OS X,我想.exec的东西,但是当一个路径包含空格,这是行不通的。我已经试过周围引号的路径,逸出的空间中,并且即使使用\ u0020。
例如,这样工作的:
Runtime.getRuntime().exec("open /foldername/toast.sh");
但是,如果有一个空间,所有这些工作:
Runtime.getRuntime().exec("open /folder name/toast.sh");
Runtime.getRuntime().exec("open \"/folder name/toast.sh\"");
Runtime.getRuntime().exec("open /folder\\ name/toast.sh");
Runtime.getRuntime().exec("open /folder\u0020name/toast.sh");
想法?
编辑:转义反斜杠...仍然没有worky
解决方案
有对 Sun的论坛的总结...似乎不仅限于OS X.
一个很常见的问题在该线程最后的后总结了提出的解决方案。本质上,使用Runtime.exec
的,需要一个String[]
阵列形式:
String[] args = new String[] { "open", "\"/folder name/toast.sh\"" };
或(论坛表明这将太工作)
String[] args = new String[] { "open", "folder name/toast.sh" };
其他提示
尝试这种情况:
Runtime.getRuntime().exec("open /folder\\ name/toast.sh");
“\”将只把一个空间中的字符串中,但是“\”将会把串,这将被传递到壳在一个“\”,并且壳将逸出的空间。
如果不工作,通过在参数作为数组,一个元件为每个参数。这样的外壳不介入,你不需要离奇越狱。
Runtime.getRuntime().exec(new String[]{"open", "/folder name/toast.sh"});
保罗的选择工作,但仍必须逃脱的空间,像这样:
Runtime.getRuntime().exec(new String[]{"open", "/folder\\ name/toast.sh"});
,吸有关使用字符串数组的事情是,每个PARAM和它的选择必须是在他们自己的元素。举例来说,你不能做到这一点:
Runtime.getRuntime().exec(new String[]{"executable", "-r -x 1", "/folder\\ name/somefile"});
而是必须像这样指定:
Runtime.getRuntime().exec(new String[]{"executable", "-r", "-x", "1", "/folder\\ name/somefile"});
不隶属于 StackOverflow