在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"});
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top