具有以下属性文件:
foo=hello, world!
bar=first,second
我想以字符串形式检索第一项,以数组形式检索第二项。我原以为 getString
vs getStringArray
会处理这个问题,但事实并非如此 - getString("foo")
只是获取之前的所有内容逗号,即“你好”。
如果我使用 setDelimiterParsingDisabled
禁用定界符解析,foo 没问题,但这也会改变 getStringArray("bar")
的行为以返回单元素数组!
我找不到如何明确告诉它我希望它如何解释单个配置项,无论是作为字符串还是作为数组。我不想将配置项放入具有不同分隔符规则的单独配置文件中,我更愿意使用逗号作为 getStringArray 案例的分隔符。
为了详细说明,此代码段打印 hello - 2
或 hello, world! - 1
- 我希望它打印 hello, world! - 2
!
AbstractFileConfiguration config = new PropertiesConfiguration();
config.setFileName("C:\\temp\\temp.properties");
//config.setDelimiterParsingDisabled(true);
config.load();
System.out.println(config.getString("foo") + " - " + config.getStringArray("bar").length);
最佳答案
正如您所发现的,Commons Config 缺少诸如 getPlainString()
方法之类的东西。以下是一些解决方法的建议。
我认为使用不同的列表定界符是最容易实现的。如果您需要更复杂的东西,请考虑其他两个:
通过 setListDelimiter() 使用不同的列表分隔符
只要您不需要将相同的值解释为字符串和数组即可。
属性文件:
foo=hello, world!
bar=first;second
代码:
AbstractFileConfiguration config = new PropertiesConfiguration();
config.setFileName("C:\\temp\\temp.properties");
config.setListDelimiter(';');
config.load();
System.out.println(config.getString("foo") + " - " + config.getStringArray("bar").length);
禁用分隔符解析并进行您自己的拆分
使用 String.split() 轻松完成.一个简单的静态方法就可以:
public static String[] gerStringArray(Configuration config, String key)
或者创建 PropertiesConfiguration
的子类并覆盖 getStringArray()
和 getList()
方法。
使用两种不同的配置
一个用于设置数据,您知道数据的格式。您可以在此处激活定界符解析。
还有一个用于您可能拥有任意数据的文本数据。您应该在此处停用定界符解析。
这具有分离设置和文本数据的额外优势。
- 不混合设置和文本数据可以使两种配置更简洁。特别是如果两者都有很多。
- 设置数据通常会根据部署环境(实时/测试)发生变化,而文本数据会根据区域设置 (en_GB/de_DE) 发生变化。
关于java - 我可以在 Apache Commons Config 中同时使用数组和非数组吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11973773/