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".
Некоторое время искали это решение.
- сначала вам нужно установить setConfig, а затем загрузить файл.
- вам нужно использовать 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