使用以下属性文件:
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);
答案 0 :(得分:4)
正如您所发现的,Commons Config缺少类似getPlainString()
方法的东西。以下是一些解决方法的建议。
我认为使用不同的列表分隔符是最容易实现的。如果您需要更复杂的东西,请考虑另外两个:
只要您不需要解释与String和数组相同的值,就可以正常工作。
属性文件:
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()
方法。
一个用于设置数据,您可以在其中了解数据的格式。在这里,您可以激活分隔符解析。
其中一个用于文本数据,您可能拥有任意数据。在这里,您应该停用分隔符解析。
这具有分离设置和文本数据的额外优势。
答案 1 :(得分:0)
在属性文件中,您可以执行以下操作:
urls=localhost
urls=127.0.0.1
在Java中,您可以获得列表:
String[] urls = Configure.settings().getStringArray("urls");
for(String url : urls)
System.out.println(url);