Apache Commons Configuration 在遇到逗号字符之前加载属性。

19

我想从属性文件中加载配置(使用Apache Commons Configuration)。我的程序是:

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

my.properties文件中我有以下内容:

 myValue=value,

有逗号的情况

当我运行程序时,输出是value,而不是value, with comma。看起来是在遇到,字符之前就加载了value

有什么想法吗?


2
请注意,这不再是commons-configuration 2中的默认行为。(https://commons.apache.org/proper/commons-configuration/userguide/upgradeto2_0.html#Accessing_Configuration_Properties) - David Moles
5个回答

16

这种行为是明确记录在案的,即PropertiesConfiguration将逗号分隔的值视为多个值,可以使用以下方式:

fruit=apples,banana,oranges

要被明智地解释。修复方法(来自文档)是添加反斜杠以转义逗号,例如,

myKey=value\, with an escaped comma

1
请注意,如果您正在使用具有不同配置文件的配置文件,则需要使用“\,”两次转义这些逗号,因为字符串将被解析两次。 - bogdan.rusu
@bogdan.rusu 双重转义对我们有用。谢谢! - David Velasquez

10

请查看Javadoc。要禁用属性列表的解析,您需要调用setDelimiterParsingDisabled(true)。


7

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

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

如果您的代码如下,设置将无效:

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

1

0

如果在 , 前面加上 \,你就可以转义它,并读取该值。

例如:

myValue=value\, with comma

你可以毫无问题地读取带逗号的数值


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接