java - 我可以在 Apache Commons Config 中同时使用数组和非数组吗?

标签 java configuration apache-commons-config

具有以下属性文件:

foo=hello, world!
bar=first,second

我想以字符串形式检索第一项,以数组形式检索第二项。我原以为 getString vs getStringArray 会处理这个问题,但事实并非如此 - getString("foo") 只是获取之前的所有内容逗号,即“你好”。

如果我使用 setDelimiterParsingDisabled 禁用定界符解析,foo 没问题,但这也会改变 getStringArray("bar") 的行为以返回单元素数组!

我找不到如何明确告诉它我希望它如何解释单个配置项,无论是作为字符串还是作为数组。我不想将配置项放入具有不同分隔符规则的单独配置文件中,我更愿意使用逗号作为 getStringArray 案例的分隔符。

为了详细说明,此代码段打印 hello - 2hello, 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/

相关文章:

java - Spring Integration 5.1 - 使用@IntegrationConverter 的集成流转换不起作用

groovy - 如何将 Email-Ext groovy 脚本放置在 jenkins 文件系统上

java - 使用 Commons Configuration 在数据库中存储属性

java - 如何从 xml 字符串内容构建 HierarchicalConfiguration 对象?

java - 如何使用 GridLayout 或 GridBagLayout 垂直填充 JPanel?

java - 将事件处理程序添加到标签中包含的 ImageView

java - 如何仅更改一个字段来创建多个 xml 请求?

c# - .Net 3.5 中的 Configuration.Save() 在部署/ Release模式下不起作用

java - Tomcat 6 SSL 配置 - 在 Chrome 中显示重新协商已禁用的错误!

java - Commons XMLConfiguration 和模式验证?