问题: - 如果可执行命令包含任何空格,则 System.exec 在第一个空格后省略字符串内容。
例如: - if command =“ / opt / GUIInstaller / installers / abc def gh.bin ” 然后java只执行命令 - / opt / GUIInstaller / installers / abc ,导致错误,如 java.io.IOException:“/ opt / GUIInstaller / installers / abc”:error = 2,没有这样的文件或目录
protected void launch(final String command)
{
try
{
if(command.contains("null"))
{
logger.error("Installer is not located in the specified folder: "+command);
System.exit(0);
}
runTime.exec(command);
}
catch (IOException ioException) {
logger.error(ioException.getMessage(), ioException);
}
}
我是否有任何错误,请帮我解决这个问题。
环境: - Java7 update9 + RHEL6
答案 0 :(得分:3)
如Process#exec()
的javadoc所述,exec(String)
只需通过StringTokenizer
将给定的命令字符串拆分为标记。如果你通过将令牌传递给exec()
来完成这项工作,那么这里的空格是没有问题的:
runTime.exec(new String[] {"/opt/GUIInstaller/installers/abc def gh.bin", "--param1=foo"});
答案 1 :(得分:0)
添加
if(command.contains(" ")){command.replace(" ","\\ ");}
在runTime.exec(命令)之前;
这基本上只是用转义空格替换空格..
编辑: 或者为了让它更顺畅,试着执行这个
runTime.exec(command.replace(" ","\\ "));
没有添加上述行..