2009-10-21 5 views
8

Java uygulamam için basit anahtar/değer çifti yapılandırmasını depolamak için ini dosyasını kullanmaya karar verdim.ini4j - Bir tuştaki tüm anahtar isimler nasıl alınır?

Ben googled ve stackoverflow aranan ve ini4j in Java dosyaları ayrıştırma ve yorumlama için şiddetle tavsiye edildi bulundu. Ini4j sitesinde öğreticiyi okumak için zaman harcadım; Ancak, ini dosyasındaki bir ayar için tüm anahtar değerlerin nasıl alınacağından emin değildim. Örneğin

, böyle bir ini dosyası varsa:

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

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

ve vaktinden tuşların isimlerini bilmiyorum varsayalım. Anahtarların listesini sonunda anahtarlara göre alabilmem için nasıl anahtar listesini alabilirim? Örneğin, yiyecek için bir anahtar listesi alırsam, 'isim', 'tip' ve 'fiyat'ı içeren bir dizi veri veya bir çeşit veri yapısı alırdım.

Biri bana ini dosyasını açacağınız, ayrıştırdığınız veya yorumladığınız bir uygulama gösterebilir, böylece bir uygulama ini dosyasının tüm yapı ve değerlerini bilir ve anahtar ve değerler listesini alabilir mi?

+1

olsun() ve anahtar kümesi() vardır (sipariş değişebilir) .ini dosyaları gibi bölümleri yok. –

+0

@mmyers: Sorun buydu. Yaptığım bu araç için bölümlere ihtiyacım vardı. Ini4j ile bunu yapmanın bir yolu olduğuna eminim, sadece doğru api'yi, sınıfı veya öğreticiyi bulamıyorum – codingbear

cevap

11

Bu ürün için garanti verilmez. 5 dakika içinde yapıldı. Ama buna bir dizi seçenek ile bölümlerin her biri bir dizi oluşur bilerek yanında sen ini kendisinin başka bilgisi olmadan sağlanan ini (okur.

Eğer geri kalanını kendine anlamaya gerekecek sanırım.

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

kontrol dışarı ini4j Samples ve ini4j Tutorials de. Ne kadar sık ​​bir değil çok iyi belgelenmiş kütüphanesi.

+0

Sadece ne yapmam gerekiyorsa onu nasıl yapacağımı anladım! Gönderdiğiniz çözüme benzer! Buna bakmak için gösterdiğiniz çaba için teşekkür ederiz. Yararlı dersler bulmak için eğitim tahminleri ile API'dan geçmek zorundaydım :) – codingbear

2

Ben kaynağına adım attı yüzden entrySet yöntemi bulana kadar ben. sayesinde dökümanında şey bulamadık bunu yapabilirsin:

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()); 
    } 
} 

Bu kod, temel olarak .ini dosyasını konsola yeniden yazdırır. Sizin örnek dosyası bu çıktıyı üretecektir: ilgi

[food] 
name = steak 
type = american 
price = 20.00 
[school] 
dept = cse 
year = 2 
major = computer_science 
0

yöntemleri olsa da, sen yerine java.util.Properties kullanabilir

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