2009-10-21 10 views
8

Zdecydowałem się użyć pliku ini do przechowywania prostej pary klucz-wartość konfiguracji dla mojej aplikacji Java.ini4j - Jak uzyskać wszystkie kluczowe nazwy w ustawieniach?

Przeszukałem i przeszukano stackoverflow i okazało się, że ini4j jest wysoce zalecane do analizowania i interpretowania plików ini w Javie. Spędziłem trochę czasu czytając samouczek na stronie ini4j; jednak nie byłem pewien, jak uzyskać wszystkie kluczowe wartości dla ustawienia w pliku ini.

Na przykład, jeśli mam pliku ini tak:

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

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

i zakładamy, że nie znam nazwy przycisków z wyprzedzeniem. Jak uzyskać listę kluczy, aby móc w końcu pobrać wartości według kluczy? Na przykład, otrzymam tablicę lub jakąś strukturę danych zawierającą "nazwę", "typ" i "cenę", jeśli otrzymam listę kluczy do żywności.

Czy ktoś może pokazać mi przykład, w którym można otworzyć plik ini, przeanalizować go, aby aplikacja znała całą strukturę i wartości pliku ini oraz uzyskać listę kluczy i wartości?

+1

Można raczej używać java.util.Properties, choć nie ma sekcji takich jak pliki .ini. –

+0

@mmyers: To był problem. Potrzebowałem sekcji dla tego narzędzia, które robię. Jestem pewien, że istnieje sposób na zrobienie tego z ini4j, po prostu nie można znaleźć odpowiedniego api, klasy lub samouczka. – codingbear

Odpowiedz

11

Brak gwarancji na ten. Zrobiłem to za 5 minut. Ale czyta INI podane bez dalszego poznania samego INI (obok wiedzy, która składa się z kilku odcinków, każdy z wielu opcji.

Chyba trzeba będzie dowiedzieć się resztą sam.

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

Wyjazd ini4j Samples i ini4j Tutorials też. Jak często niezbyt dobrze udokumentowana biblioteka.

+0

Po prostu wymyśliłem, jak zrobić to, co muszę zrobić! Podobne do opublikowanego rozwiązania! Dziękuję za twój wysiłek, aby się temu przyjrzeć. Musiałem przejść przez API z domysłami edukacyjnymi, aby znaleźć przydatne zajęcia :) – codingbear

2

nie mogłem znaleźć nic w tutoriali więc przeszedł przez źródła, aż znalazłem metodę entrySet. z możesz to zrobić:

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

Ten kod zasadniczo ponownie drukuje plik .ini na konsoli. Plik przykładowy przyniosłoby to wyjście: (kolejność może się różnić)

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

Metody miejsca to get() i 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) 
} 
Powiązane problemy