0

您好,我的问题如下:我有一个带有 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在第一个空格之后切割startconfig:

不能运行程序 """C:\Program" 当它在双引号中或不能运行程序 ""C:\Program":

我尝试了几种带有“”的变体,带有转义等等,没有任何东西可以提供我需要的结果

我如何配置 getproperty 以读取直到 EOL?

干杯

4

3 回答 3

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_HOME如果你只想启动一个已知的 java 二进制文件,我真的建议你利用环境变量。这样,您可以将其简化为属性文件中的一组参数。

于 2013-10-30T09:23:31.680 回答
0

尝试将您的空格替换为:“\u0020”

于 2013-10-30T08:05:18.440 回答
-1

用这个:

     StringEscapeUtils.escapeXml(String input);

在此处查看文档

于 2013-10-30T08:05:25.170 回答