将带有空格的java属性值读入一个变量

时间:2013-10-30 08:00:01

标签: java properties

您好我的问题如下: 我有一个属性领域,其外部程序的startconfig可以从java运行:

   # Standardauswahl falls keine PlayerType übergeben wurden 
   Default = 1
   # Liste der gültigen PlayerTypes
   PlayerTypes = Human,MCTS,TMM,Random,Value
   StartConfig = \"C:\\Program Files\\Java\\jdk1.7.0_13\\bin\\javaw.exe\" -Dlog4j.configuration=file:///C:/Users/djdeejay/git/myGit/com.djdeejay.cowTrade.client.standaloneplayer.application/bin/log4j.xml -Dfile.encoding=Cp1252 -classpath  [..... some parameter deleted.....] 0.0-RC1.jar;C:\\Users\\djdeejay\\git\\myGit\\de.thWildau.cowTrade.server\\lib\\slf4j-api-1.5.2.jar;C:\\Users\\djdeejay\\git\\myGit\\de.thWildau.cowTrade.server\\lib\\slf4j-log4j12-1.5.2.jar;C:\\Users\\djdeejay\\git\\myGit\\de.thWildau.cowTrade.server\\lib\\log4j-1.2.16.jar com.djdeejay.cowTrade.client.standaloneplayer.application.RandomPlayerApplication %1 %2 %3  

当我加载属性时如下

cmd = this.serverSettings.getPlayerTypeSetting("StartConfig");

@Override
public String getPlayerTypeSetting(String key) {
    return this.startPlayerTypeSettingsProp.getProperty(key);
}

第一个空格后的java cutting startconfig:

无法运行程序“”“C:\ Program”当它在双引号中或无法运行程序时“”C:\ Program“:

我尝试了几个带有“”的变种,有了逃避等等,什么都没有给出我需要的结果

如何配置getproperty直到EOL读取?

欢呼声

3 个答案:

答案 0 :(得分:0)

尝试用以下内容替换空格:“\ u0020”

答案 1 :(得分:0)

正如评论中所讨论的,getProperty电话是正常的。但是Runtime.getRuntime().exec(cmd)中作为单个字符串的用法使用默认的空格Tokenizer将字符串拆分为命令和参数。

要自己执行此操作,请先手动拆分字符串,然后将其传递给Runtime#exec

String startCmdLine = this.serverSettings.getPlayerTypeSetting("StartConfig");
int cmdEndPos = startCmdLine.indexOf("javaw.exe") + "javaw.exe".length();
String cmd = startCmdLine.substring(0, cmdEndPos);
String args = startCmdLine.substring(cmdEndPos);

Runtime.getRuntime().exec(new String[]{ cmd, args });

如果你只是想创建一个已知的java二进制文件,我真的建议你利用JAVA_HOME环境变量。这样,您可以将其减少为属性文件中的一组参数。

答案 2 :(得分:-1)

使用此:

     StringEscapeUtils.escapeXml(String input);

请参阅doc here