Java ini4j - чтение нескольких опций из файла.ini

Я пытаюсь прочитать несколько значений с помощью 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 после чтения, и я хотел бы, чтобы это был массив или список, что угодно.

3 ответа

Решение

Веб-сайт для проекта ini4j содержит (среди прочего) очень простые учебники. В одном из этих руководств объясняется, как получить несколько значений. Как можно ожидать получения списка или массива при использовании метода выборки, который возвращает одну ссылку? Посмотрите на API!

В учебнике есть часть, объясняющая множественные значения:

Библиотека [ini4j] представляет интерфейс MultiMap, который расширяет карту нормалей, но позволяет умножать значения на ключи. Вы можете просто индексировать значения для данного ключа, аналогично индексированным свойствам в 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 является Section, но он также должен работать с Ini,

И просто, чтобы сделать это полным: Ini также знает метод List<V> getAll(Object key),

Для обработки свойств Mutliple в разделе используйте следующий код:

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

Не открывайте непосредственно файл INI при создании класса, установите параметры ранее, иначе параметры не будут использоваться, и по умолчанию MultiOption si установлен на "false".

Некоторое время искали это решение.

  1. сначала вам нужно установить setConfig, а затем загрузить файл.
  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
Другие вопросы по тегам