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

Java ini4j-如何获取设置中的所有键名?,java,configuration,ini4j,Java,Configuration,Ini4j,我决定使用ini文件为我的Java应用程序存储简单的键值对配置 我在谷歌上搜索了stackoverflow,发现强烈建议在Java中解析和解释ini文件时使用ini4j。我花了一些时间在ini4j网站上阅读教程;但是,我不知道如何在ini文件中获取设置的所有键值 例如,如果我有这样一个ini文件: [ food ] name=steak type=american price=20.00 [ school ] dept=cse year=2 major=computer_science 假设

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

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

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

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

[ school ]
dept=cse
year=2
major=computer_science
假设我事先不知道钥匙的名字。如何获取键列表,以便最终根据键检索值?例如,如果我得到食物的钥匙列表,我会得到一个数组或某种数据结构,其中包含“name”、“type”和“price”


有人能给我举个例子,你可以打开一个ini文件,解析或解释它,让应用程序知道ini文件的所有结构和值,并得到键和值的列表吗?

这一点不保证。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));
            }
        }
    }
}

也可以签出。通常是一个没有很好文档记录的库。

我在教程中找不到任何内容,因此我逐步浏览了源代码,直到找到了
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());
    }
}

感兴趣的方法是get()和keySet()

在科特林:

        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])
                }
            }
        }

您可能更愿意使用java.util.Properties,尽管它没有像.ini文件那样的部分。@mmyers:这就是问题所在。我正在制作的这个工具需要一些部分。我非常确定有一种方法可以用ini4j实现这一点,只是找不到合适的api、类或教程。我只是想知道如何做我需要做的事情!与解决方案类似您已经发布了!感谢您对此进行的研究。我必须通过API进行教育性猜测才能找到有用的类:)
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)
}
        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])
                }
            }
        }