ini4j - 如何获取设置中的所有键名?

时间:2009-10-21 17:19:32

标签: java configuration ini4j

我决定使用ini文件为我的Java应用程序存储简单的键值对配置。

我用Google搜索并搜索了stackoverflow,发现强烈建议使用ini4j来解析和解释Java中的ini文件。我花了一些时间阅读ini4j网站上的教程;但是,我不知道如何获取ini文件中的设置的所有键值。

例如,如果我有这样的ini文件:

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

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

并假设我不知道密钥的名称。如何获取密钥列表以便最终可以根据密钥检索值?例如,如果我得到食物密钥列表,我会得到一个包含'name','type'和'price'的数组或某种数据结构。

有人可以告诉我一个例子,你打开一个ini文件,解析或解释它,以便应用知道ini文件的所有结构和值,并获得键和值列表?

4 个答案:

答案 0 :(得分:12)

不保证这个。在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 Samplesini4j Tutorials。通常是一个没有很好记录的库。

答案 1 :(得分:3)

我在教程中找不到任何内容,所以我逐步完成了源代码,直到找到了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

答案 2 :(得分:0)

感兴趣的方法是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)
}

答案 3 :(得分:0)

在科特林:

        val ini = Wini(File(iniPath))
        Timber.e("Read value:${ini}")
        println("Number of sections: "+ini.size+"\n");
        for (sectionName in ini.keys) {
            println("[$sectionName]")
            val section: Profile.Section? = ini[sectionName]
            if (section != null) {
                for (optionKey in section.keys) {
                    println("\t" + optionKey + "=" + section[optionKey])
                }
            }
        }