我正在尝试使用 ini4j 读取多个值,文档说 Options 类应该可以。
这是我的示例.ini文件(./dwarfs.ini)
[dopey]
age = 23
fortuneNumber = 11
fortuneNumber = 33
fortuneNumber = 55
以下是读取它的代码:
Ini ini = new Ini();
Config conf = new Config();
conf.setMultiOption(true);
ini.setConfig(conf);
ini.load(new FileReader("./dwarfs.ini"));
但是 fortuneNumber 属性在阅读后只有 55,我希望它是一个数组或列表,任何东西。
ini4j项目的Web存在包含(除其他外)非常简单的教程。其中一个教程解释了如何检索多个值。当使用返回单个引用的 fetch 方法时,您如何期望获得列表或数组?看看 API!
在本教程中,有一部分解释了多值:
[ini4j] 库引入多映射接口,扩展正常 映射,但允许将每个键的值相乘。您可以简单地索引值 对于给定的键,类似于 JavaBeans API 中的索引属性。
还有一个例子:
String n1 = sneezy.get("fortuneNumber", 0); // = 11
String n2 = sneezy.get("fortuneNumber", 1); // = 22
String n3 = sneezy.get("fortuneNumber", 2); // = 33
String n4 = sneezy.get("fortuneNumber", 3); // = 44
在这个例子中,打喷嚏是一个Section
,但它也应该与Ini
一起使用。
只是为了完成它:Ini
也知道一种方法List<V> getAll(Object key)
。
要处理节中的多个属性,请使用以下代码:
Ini oINI = new Wini();
Config conf = new Config();
conf.setMultiOption(true);
oINI.setConfig(conf);
oINI.load(new File("....../myfile.ini"));
不要在类创建中直接打开INI文件,在之前设置选项,否则选项将不会被使用,默认情况下MultiOption si设置为"false"。
已经搜索了一段时间来寻找这个解决方案。
- 您需要先设置配置,然后加载文件。
- 您需要使用 List 来处理多个相同的值。
这是一个例子:
Ini ini = new Wini();
Config config = new Config();
config.setMultiOption(true);
config.setMultiSection(true);
ini.setConfig(config); //set config
ini.load(new File(filename)); // load AFTER setConfig
for (String sectionName : ini.keySet()) {
List<Section> sectionList = ini.getAll(sectionName); // use List
for (Section section : sectionList) {
for (String optionName : section.keySet()) {
List<String> optionList = section.getAll(optionName);
for (String optionVaule : optionList) {
System.out.printf("%s %s %sn", sectionName, optionName, optionVaule);
}
}
}
}
这里输出:
dopey age 23
dopey fortuneNumber 11
dopey fortuneNumber 33
dopey fortuneNumber 55