“在使用Runtime.exec并在程序文件名中包含空格时使用“无法运行程序”

问题描述 投票:2回答:5

我正在使用以下代码打开“ 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

有人能帮我解决这个问题吗?预先感谢。

java process ioexception runtime.exec
5个回答
4
投票

Runtime.exec(String)自动将字符串分割成空格,假设第一个标记是命令名称,其余的是命令行参数。此外,尽管browserfile之间不是空格,但这不是问题的根本原因。

它认为您想使用两个命令行参数运行“ C:/ Program”:

  1. “文件”
  2. “(x86)/google/Chrome/Application/chrome.exeC:/sample.html”

改为使用Runtime.exec(String[]),那样您可以完全控制什么:

Runtime.exec(String[])

2
投票

尝试一下。

 String[] command = new String[]{browser, filename};
 Runtime.exec(command);

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(); } -问题在于它如何[[处理单个字符串输入。

错误消息表明

how / where

失败:请注意,它在“ C:/ Program”(或第一个空格)之后停止。这表明exec“错误地”解析了字符串,因此甚至没有在寻找正确的可执行文件。
无法运行程序“ C:/程序”

相反,请考虑使用Runtime.exec(String)。尽管用法依系统而定,但ProcessBuilder允许将可执行文件名(需要专门处理)和参数分开,并且最不明智地正确调用目标。

ProcessBuilder

据我所知,在Windows中,ProcessBuilder会将各个组件用引号引起来;当参数包含引号时,这可能会产生
different
问题。

1
投票

0
投票
© www.soinside.com 2019 - 2024. All rights reserved.