【问题标题】:apache commons configuration loads property until "," characterapache commons 配置加载属性直到“,”字符
【发布时间】:2023-04-09 10:56:01
【问题描述】:

我想从属性文件加载配置(apache commons 配置)。我的程序是:

PropertiesConfiguration pc = new PropertiesConfiguration("my.properties");
System.out.println(pc.getString("myValue"));

my.properties我有

 myValue=value,

带逗号

当我运行程序时,输出是value,而不是value, with comma。看起来值已加载到 , 字符。

有什么想法吗?

【问题讨论】:

标签: java apache-commons apache-config


【解决方案1】:

这种行为是clearly documented,即PropertiesConfiguration 将带逗号的值视为多个值,允许执行以下操作:

fruit=apples,banana,oranges

要合理解释。修复(来自文档)是添加一个反斜杠来转义逗号,例如,

myKey=value\, with an escaped comma

【讨论】:

  • 请注意,如果您使用具有不同配置文件的配置文件,则需要将这些 ',' 逗号与 '\\,' 转义两次,因为字符串会被解析两次。
【解决方案2】:

PropertiesConfiguration 将 ',' 解释为值分隔符。

【讨论】:

    【解决方案3】:

    检查Javadoc。您必须 setDelimiterParsingDisabled(true) 禁用解析属性列表。

    【讨论】:

      【解决方案4】:

      如果你把\放在,之前,你就将它转义,你可以读取值

      例子:

      myValue=value\, with comma
      

      您阅读 = value, with comma 没有问题

      【讨论】:

        【解决方案5】:

        其实 propConfig.setDelimiterParsingDisabled(true) 是有效的,但是你必须在这个设置之后加载配置文件,例如:

        propConfig = new PropertiesConfiguration();
        propConfig.setDelimiterParsingDisabled(true);
        propConfig.load(propertiesFile);
        

        如果您的代码如下:设置将不起作用:

        propConfig = new PropertiesConfiguration(propertiesFile);
        propConfig.setDelimiterParsingDisabled(true);
        

        【讨论】:

        • 谢谢,这有帮助!!
        猜你喜欢
        • 2017-02-10
        • 2011-08-31
        • 2016-06-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-09-02
        • 2013-08-12
        • 1970-01-01
        相关资源
        最近更新 更多