rod*_*cia 5 java properties apache-commons-config
我正在使用Apache Commons Configuration来读取属性文件,我完全能够进行变量插值,并且还可以将多值属性作为列表进行检索.但是,我无法正确加载具有多个值的属性,其中一个属性是另一个多值属性的引用(变量插值).
这是我的属性文件的示例(我也尝试使用逗号分隔语法):
doc.mime=application/msword
doc.mime=application/vnd.openxmlformats-officedocument.wordprocessingml.document
doc.mime=${office.mime}
office.mime=application/x-tika-msoffice
office.mime=application/x-tika-ooxml
Run Code Online (Sandbox Code Playgroud)
以及我如何阅读它:
Configuration config = new PropertiesConfiguration("myFile");
final String[] mimesArray = config.getStringArray("doc.mime");
for(String mime : mimesArray) System.out.println(mime);
final List<Object> mimesList = config.getList("doc.mime");
System.out.println(mimesList);
Run Code Online (Sandbox Code Playgroud)
这是我用任何一种方法得到的内容(getStringArray和getList):
[application/msword, application/vnd.openxmlformats-officedocument.wordprocessingml.document, application/x-tika-msoffice]
这跟我想象中的不同:两者的全部内容doc.mime和office.mime
有谁知道是否有可能在我的其他列表中插入整个值列表?如果是这样,它是如何完成的?
Commons 配置的作用
正如您所发现的:在插入多值属性时,Commons Configuration 只会解析该属性的第一个值。请参阅AbstractConfiguration#resolveContainerStore() 第 1177 行的代码。
我发现了一些相关的问题:
CONFIGURATION-28:有人想要(并得到)与您想要的完全相反的东西:只有多值属性中的第一个值。
CONFIGURATION-55:更多关于多值属性插值的讨论:
这个问题可能没有正确的解决方案,因为预期结果在很大程度上取决于具体用例
解决方法:在代码中合并两个列表
绝对比自定义插值更容易:
List<Object> mimesList = config.getList("doc.mime");
List<Object> officeList = config.getList("office.mime");
mimesList.addAll(officeList);
System.out.println(mimesList);
Run Code Online (Sandbox Code Playgroud)
使用 Commons Configuration 项目提出这个问题
改变整个可变插值系统可能很困难。但他们至少可以澄清文档。
| 归档时间: |
|
| 查看次数: |
6136 次 |
| 最近记录: |