6

使用以下属性文件:

foo=hello, world!
bar=first,second

我想将第一项作为字符串检索,将第二项检索为数组。我原以为getStringvsgetStringArray会处理这个问题,但事实并非如此 -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);
4

2 回答 2

4

正如您所发现的,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()andgetList()方法。

使用两种不同的配置

一种用于设置数据,您知道数据将具有什么格式。在这里您可以激活分隔符解析。

一个用于文本数据,您可能有任意数据。在这里,您应该停用分隔符解析。

这具有分离设置和文本数据的额外优势。

  • 不混合设置和文本数据可以使两种配置保持清洁。特别是如果两者都有很多。
  • 通常设置数据会根据部署环境(实时/测试)而变化,而文本数据会根据区域设置(en_GB/de_DE)而变化。
于 2012-08-16T19:27:55.333 回答
0

在属性文件中,您可以执行以下操作:

urls=localhost
urls=127.0.0.1

在 Java 中,您可以获得列表:

String[] urls = Configure.settings().getStringArray("urls");
for(String url : urls)
    System.out.println(url);
于 2014-03-06T15:40:23.497 回答