Java ini4j-如何获取设置中的所有键名?
我决定使用ini文件为我的Java应用程序存储简单的键值对配置 我在谷歌上搜索了stackoverflow,发现强烈建议在Java中解析和解释ini文件时使用ini4j。我花了一些时间在ini4j网站上阅读教程;但是,我不知道如何在ini文件中获取设置的所有键值 例如,如果我有这样一个ini文件: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 假设
[ 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])
}
}
}