1

我正在尝试使用 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,我希望它是一个数组或列表,任何东西。

4

3 回答 3

2

ini4j 项目的网络存在(除其他外)包含非常简单的教程。这些教程之一解释了如何检索多个值。当使用返回单个引用的 fetch 方法时,你怎么能期望得到一个列表或数组?看API

在教程中,有一部分解释了多值:

[ini4j] 库引入了 MultiMap 接口,它扩展了普通 Map,但允许每个键乘以值。您可以简单地索引给定键的值,类似于 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

在此示例中,sneezy 是 a Section,但它也应该与 a 一起使用Ini

并且只是为了使它完整: AnIni也知道一个方法List<V> getAll(Object key)

于 2013-10-31T07:20:31.307 回答
1

要处理部分中的多个属性,请使用以下代码:

Ini oINI = new Wini();
Config conf = new Config();
conf.setMultiOption(true);
oINI.setConfig(conf);
oINI.load(new File("....../myfile.ini"));

类创建时不要直接打开INI文件,之前设置选项,否则选项不会被使用,默认MultiOption si设置为“false”。

已经为此解决方案搜索了一段时间。

于 2016-12-27T10:05:16.297 回答
-1
  1. 你需要先设置配置,然后加载文件。
  2. 您需要使用 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 %s\n", sectionName, optionName, optionVaule);
            }
        }
    }
}

这里的输出:

dopey age 23
dopey fortuneNumber 11
dopey fortuneNumber 33
dopey fortuneNumber 55
于 2017-04-06T09:28:02.650 回答