我使用以下代码打开“sample.html”文件。
String filename = "C:/sample.html";
String browser = "C:/Program Files (x86)/Google/Chrome/Application/chrome.exe";
Runtime rTime = Runtime.getRuntime();
Process pc = rTime.exec(browser + filename);
pc.waitFor();
但是,我收到以下错误。
java.io.IOException: Cannot run program "C:/Program": CreateProcess error=2, The system cannot find the file specified
请有人帮我解决这个问题。提前谢谢。
答案 0 :(得分:4)
Runtime.exec(String)
会自动在空格处拆分字符串。此外,browser
和file
之间没有空格,但这不是问题的根本原因。
它认为你想用两个命令行参数运行“C:/ Program”:
使用Runtime.exec(String[])
代替,这样你可以完全控制什么是:
String[] command = new String[]{browser, filename};
Runtime.exec(command);
答案 1 :(得分:2)
试试这个。
String filename = "C:\\sample.html";
String browser = "C:\\Program Files (x86)\\Google\\Chrome\\Application\\chrome.exe";
Runtime runtime = Runtime.getRuntime();
try {
runtime.exec(new String[] {browser, filename});
} catch (IOException e) {
e.printStackTrace();
}
答案 2 :(得分:2)
停止使用Runtime.exec(String)
- 问题在于它如何处理单个字符串输入。
错误消息指示如何/在哪里失败:请注意它在“C:/ Program”(或第一个空格)之后停止。这表明exec“错误地”解析了字符串,因此甚至没有找到正确的可执行文件。
无法运行程序“C:/ Program”
相反,请考虑使用ProcessBuilder。虽然使用仍然依赖于系统,但ProcessBuilder允许分离可执行文件名(并且需要特别处理它)和参数,并且最难以正确调用目标。
String filename = "C:\\sample.html";
String browser = "C:\\Program Files (x86)\\Google\\Chrome\\Application\\chrome.exe";
ProcessBuilder pb = new ProcessBuilder(browser, filename);
// setup other options ..
// .. and run
Process p = pb.start();
p.waitFor();
据我所知,在Windows中,ProcessBuilder会将各个组件包装在引号中;当参数包含引号时,这会产生不同的问题。
答案 3 :(得分:1)
参数必须单独传递:
Process pc = rTime.exec(new String[]{browser, filename});
使用exec()
与使用命令行不同 - 您不能使用空格来区分命令及其参数。您的尝试将尝试执行一个命令,其路径是exec和文件名的串联作为一个巨大的字符串。