2013-05-19 97 views
3

好的,我知道这可能是一个不太好看的问题,但我对Java很新,而且它可能会很容易回答。我想要做的是制作一个程序,它将使用文件路径打开Firefox,但似乎存在文件路径问题。我做了一些研究,并使用双斜杠来取消转义字符,但它仍然不起作用。我认为这与一些目录名称中有空格的事实有关。这里是我的代码:可执行文件的Java文件路径中的空格

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

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

+0

使用'ProcessBuilder'。 – fge

回答

1
"\"C:\\ .......\"" 

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

+0

为什么这不是一个有效的答案? – xtraclass

3
Process p = Runtime.getRuntime().exec("\"C:\\Program Files (x86)\\Mozilla firefox\\firefox.exe\""); 

...或使用Java 7的Windows反...

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

当我这样做时,它说“可执行文件名称已嵌入引号,拆分参数”不确定这意味着什么。 – user2399735

+0

@Mena你确定你的解决方案正在工作吗? –

+0

@LakshithaRanasingha仔细检查后,它似乎不适用于所有Java版本。也就是说,它可能会在Java 7中失败。尝试这个帖子的更多选择:http://stackoverflow.com/questions/2243993/how-to-execute-command-line-exe-file-in-java – Mena

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()居然命令行解释程序不执行程序。因此,如果路径中有空白,则需要使用参数数组。你可以在这个数组中提供额外的标志/选项(例如:open)。

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

+1

这不是一个完全正确的答案,你必须使用“围绕cmd字符串,就像在我上面的回答中, – xtraclass

+0

真的吗?你有没有运行这个?我的JVM没有告诉它,你不需要转义,这是在java 6&7中执行的真正的代码。 –

相关问题