11

Java アプリケーションの単純なキーと値のペアの構成を格納するために、ini ファイルを使用することにしました。

stackoverflow をググって検索したところ、Java での ini ファイルの解析と解釈には ini4j が強く推奨されることがわかりました。ini4j サイトのチュートリアルを読むのに時間を費やしました。ただし、ini ファイル内の設定のすべてのキー値を取得する方法がわかりませんでした。

たとえば、次のような ini ファイルがあるとします。

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

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

事前にキーの名前を知らないと仮定します。最終的にキーに従って値を取得できるように、キーのリストを取得するにはどうすればよいですか? たとえば、食品のキーのリストを取得すると、「名前」、「タイプ」、「価格」を含む配列または何らかのデータ構造が取得されます。

アプリがiniファイルのすべての構造と値を認識し、キーと値のリストを取得できるように、iniファイルを開いて解析または解釈する例を誰かに教えてもらえますか?

4

4 に答える 4

14

これに関する保証はありません。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 チュートリアルもチェックしてください。多くの場合、十分に文書化されていないライブラリです。

于 2009-10-21T18:48:01.997 に答える
4

チュートリアルで何も見つからなかったので、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
于 2011-04-28T09:01:02.680 に答える
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])
                }
            }
        }
于 2020-10-15T13:49:18.423 に答える
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)
}
于 2014-06-27T16:23:44.003 に答える