我决定使用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文件的所有结构和值,并获得键和值列表?
答案 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 Samples和ini4j 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])
}
}
}