3

好的,我知道这可能是一个愚蠢的问题,但我对 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");
    }
}

我知道它很简单,但我仍然无法弄清楚。任何帮助表示赞赏。

4

3 回答 3

3
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);
于 2013-05-19T20:45:08.460 回答
1
"\"C:\\ .......\""

所以你可以“逃避”空白。

于 2013-05-19T20:44:11.560 回答
1

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

String [] cmds = new String [1];
cmds[0] = "C:\\Program Files (x86)\\Mozilla firefox\\firefox.exe";
Process p = Runtime.getRuntime().exec(cmds);

这是因为Runtime.getRuntime().exec()实际上并不像命令行解释器那样执行程序。因此,当路径中有空格时,您需要使用参数数组。您可以在此数组中提供额外的标志/选项(例如:打开)。

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

于 2013-05-19T21:28:48.470 回答