ini4j - Как получить все имена ключей в настройке? - PullRequest
9 голосов
/ 21 октября 2009

Я решил использовать ini-файл для хранения простой конфигурации пары ключ-значение для моего Java-приложения.

Я гуглил и искал stackoverflow и обнаружил, что ini4j настоятельно рекомендуется для анализа и интерпретации ini-файлов в Java. Я потратил некоторое время на чтение учебника на сайте ini4j; однако я не был уверен, как получить все значения ключей для параметра в INI-файле.

Например, если у меня есть INI-файл, подобный этому:

[ food ]
name=steak
type=american
price=20.00

[ school ]
dept=cse
year=2
major=computer_science

и предположим, что я не знаю названий клавиш заранее. Как получить список ключей, чтобы в конечном итоге получить значения в соответствии с ключами? Например, я бы получил массив или какую-то структуру данных, содержащую «имя», «тип» и «цену», если бы я получил список ключей для еды.

Может ли кто-нибудь показать мне пример, в котором вы открываете INI-файл, анализируете или интерпретируете его, чтобы приложение знало всю структуру и значения INI-файла, и получали список ключей и значений?

Ответы [ 3 ]

12 голосов
/ 21 октября 2009

Никаких гарантий на этот счет. Сделано это в 5 минут. Но он читает предоставленный вами ini без дальнейшего знания самого ini (помимо знания, что он состоит из нескольких разделов, каждый из которых имеет несколько параметров.

Полагаю, вам придется самостоятельно все остальное выяснить.

import org.ini4j.Ini;
import org.ini4j.Profile.Section;
import java.io.FileReader;

public class Test {
    public static void main(String[] args) throws Exception {
        Ini ini = new Ini(new FileReader("test.ini"));
        System.out.println("Number of sections: "+ini.size()+"\n");
        for (String sectionName: ini.keySet()) {
            System.out.println("["+sectionName+"]");
            Section section = ini.get(sectionName);
            for (String optionKey: section.keySet()) {
                System.out.println("\t"+optionKey+"="+section.get(optionKey));
            }
        }
    }
}

Проверьте Примеры ini4j и Учебные пособия ini4j тоже. Как часто не очень хорошо документированная библиотека.

3 голосов
/ 28 апреля 2011

Я ничего не смог найти в руководствах, поэтому я прошелся по источнику, пока не нашел метод entrySet С этим вы можете сделать это:

Wini ini = new Wini(new File(...));
Set<Entry<String, Section>> sections = ini.entrySet(); /* !!! */

for (Entry<String, Section> e : sections) {
    Section section = e.getValue();
    System.out.println("[" + section.getName() + "]");

    Set<Entry<String, String>> values = section.entrySet(); /* !!! */
    for (Entry<String, String> e2 : values) {
        System.out.println(e2.getKey() + " = " + e2.getValue());
    }
}

Этот код по сути перепечатывает INI-файл на консоль. Ваш пример файла будет производить этот вывод: (порядок может отличаться)

[food]
name = steak
type = american
price = 20.00
[school]
dept = cse
year = 2
major = computer_science
0 голосов
/ 27 июня 2014

Интересующие методы: get () и keySet ()

Wini myIni = new Wini (new File ("test.ini"));

// list section names
for (String sName : myIni.keySet()) {
    System.out.println(sName);
}

// check for a section, section name is case sensitive
boolean haveFoodParameters = myIni.keySet().contains("food");

// list name value pairs within a specific section
for (String name : myIni.get("food").keySet() {
    System.out.println (name + " = " + myIni.get("food", name)
}
...