2013-05-29 34 views
0

问题: - 如果可执行命令包含任何空格,则System.exec在第一个空格后省略字符串内容。如果包含使用java的空格,则无法执行命令

例如: - 如果命令= “/选择/ GUIInstaller /安装/ ABC DEF gh.bin” 那么Java正在执行命令,一直到/选择/ GUIInstaller /安装/ ABC只和产生的错误像产生java.io.IOException:“/选择/ GUIInstaller /安装/ ABC”:错误= 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

+1

尝试'“/选择/ GUIInstaller /安装/ ABC \\ DEF \\ gh.bin”'逃脱的空间 – Tom

回答

3

如上所述在Process#exec()的javadoc中,exec(String)只是通过StringTokenizer将给定的命令字符串拆分为令牌。如果通过令牌传递到exec()做的工作jourself,空间中有没有问题:

runTime.exec(new String[] {"/opt/GUIInstaller/installers/abc def gh.bin", "--param1=foo"}); 
+0

即使解决方案正在运行,安装程序没有启动(我的意思是GUI窗口没有出现),如果我手动尝试它,我能够启动安装程序窗口,即使我检查过程输出它没有给出任何错误。请帮我解决这个问题。 – kgopi

+0

至少让我知道** - param1 = foo **参数它会做什么 – kgopi

+0

哦。这只是一些随机的命令行参数来说明如何指定这些参数。如果你的命令没有使用任何参数,你就不需要这个参数。 – creinig

0

所述的Runtime.exec(命令)之前添加

if(command.contains(" ")){command.replace(" ","\\ ");} 

;

这基本上只是替代空间与空间逃脱..

编辑: 还是能让它更顺畅尝试没有添加上述行来执行此

runTime.exec(command.replace(" ","\\ ")); 

..

+0

如果没有空间,替换将默默无闻,那么您可能会废除if语句。 – Tom

+0

是的,我在发布后想到了这一点。这就是我编辑它的原因。感谢您的注意,虽然;) – Dropout

+1

'“\”'不是一个可接受的Java字符串文字。如果你需要一个字符串反斜杠,你必须转义它。 –