2009-10-21 50 views
8

私は、Javaアプリケーション用の単純なキーと値のペア設定を格納するためにiniファイルを使用することに決めました。ini4j - 設定ですべてのキー名を取得するにはどうすればよいですか?

私はgoogledと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ファイルの構造と値をすべて知っていることと、キーと値のリストを取得する例を表示できますか?

+1

のget()とのkeySet()です(順番は変更になる場合があります) .iniファイルのようなセクションはありません。 –

+0

@ mmyers:それが問題でした。私が作っているこのツールのセクションが必要でした。私はかなりini4jでこれを行う方法があると確信しています、ちょうど、適切なAPI、クラス、またはチュートリアルを見つけることができません – codingbear

答えて

11

これは保証されていません。それを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をチェックしてください。できるだけ頻繁ではないが非常によく文書ライブラリ。

+0

私はちょうど私がする必要があったことを行う方法を考え出した!あなたが投稿したソリューションに似ています!これを調べていただきありがとうございます。私は有用なクラスを見つけるために、教育的な推測とAPIを通過しなければならなかった:) – codingbear

2

を私はソースを通じて段階ので、私は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 
0

方法はしかし、あなたはかなりjava.util.Propertiesを使用する場合があります

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) 
} 
関連する問題