可执行文件的Java文件路径中的空格

可执行文件的Java文件路径中的空格,java,Java,好的,我知道这可能是一个不切实际的问题,但我对Java非常陌生,回答起来可能相当容易。我想做的是制作一个程序,用一个文件路径打开Firefox,但文件路径似乎有问题。我做了一些研究,并使用双斜杠使转义字符无效,但它仍然不起作用。我认为这与某些目录名中存在空格这一事实有关。这是我的密码: import java.io.IOException; public class Automation { public static void main(String[] args) throws IOEx

好的,我知道这可能是一个不切实际的问题,但我对Java非常陌生,回答起来可能相当容易。我想做的是制作一个程序,用一个文件路径打开Firefox,但文件路径似乎有问题。我做了一些研究,并使用双斜杠使转义字符无效,但它仍然不起作用。我认为这与某些目录名中存在空格这一事实有关。这是我的密码:

import java.io.IOException;

public class Automation {

public static void main(String[] args) throws IOException {
        Process p = Runtime.getRuntime().exec("C:\\Program Files (x86)\\Mozilla Firefox\\firefox.exe");
    }
}
我知道这很简单,但我还是搞不懂。感谢您的帮助

"\"C:\\ .......\""
所以你可以“逃离”空白

Process p = Runtime.getRuntime().exec("\"C:\\Program Files (x86)\\Mozilla firefox\\firefox.exe\"");
。。。或者使用针对Windows的Java 7

String[] command = new String[] {
    "C:" +
    File.separator + 
    "Program Files (x86)" +
    File.separator + 
    "Mozilla firefox" + 
    File.separator + 
    "firefox.exe"    
};
Process p = Runtime.getRuntime().exec(command);

你的问题的理想解决方案应该是这样

String [] cmds = new String [1];
cmds[0] = "C:\\Program Files (x86)\\Mozilla firefox\\firefox.exe";
Process p = Runtime.getRuntime().exec(cmds);
这是因为
Runtime.getRuntime().exec()
实际上并不像命令行解释器那样执行程序。因此,当路径中有空格时,需要使用参数数组。您可以在此数组中提供额外的标志/选项(例如:open)


这是一些额外的信息。据我所知,Windows对正向斜杠(
/
)非常满意,因为Windows API接受正向斜杠和反向斜杠(我认为从
MS DOS 2.0开始)。例如,您可以执行
dir“c:/Program Files(x86)”
将正常工作,并提供目录列表。此外,没有空格
processp=Runtime.getRuntime().exec(“C:/SomeProgram/SomeProgram.exe”)工作正常。但是,建议的方法是从环境中获取文件分隔符。这是在使用
File.separator

当我这样做时,它说“可执行文件名中嵌入了引号,拆分参数”不确定这是什么意思。@LakshithaRanasingha经过仔细检查,它似乎不适用于所有Java版本。也就是说,它可能在Java7中失败。请尝试这篇文章以获得更多的选择:@Mena-请用这些发现更新你的答案,因为这可能会帮助其他读者。好的,我已经编辑了我的文章。请注意,我既不在Windows上也不在Java 7上,因此我无法证明它是有效的:(现在感觉有点跛脚…使用
ProcessBuilder
。这不是一个完全正确的答案。你必须使用“围绕cmd字符串,就像我上面的回答一样。真的吗?你运行过这个吗?我的JVM没有告诉你。没有必要像你说的那样转义。这是在java 6和7中执行的真实代码。