2009-10-21 10 views
8

He decidido usar el archivo ini para almacenar la configuración de pares clave-valor simple para mi aplicación Java.ini4j - ¿Cómo obtener todos los nombres de las teclas en una configuración?

Busqué en google y busqué stackoverflow y encontré que ini4j es muy recomendable para analizar e interpretar archivos ini en Java. Pasé algún tiempo leyendo el tutorial en el sitio ini4j; sin embargo, no estaba seguro de cómo obtener todos los valores clave para una configuración en un archivo ini.

Por ejemplo, si tengo un archivo ini así:

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

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

y asumir que no sé nombres de las teclas antes de tiempo. ¿Cómo obtengo la lista de claves para poder recuperar los valores según las claves? Por ejemplo, obtendría una matriz o algún tipo de estructura de datos que contenga 'nombre', 'tipo' y 'precio' si obtengo una lista de claves para la comida.

¿Alguien me puede mostrar un ejemplo en el que abre un archivo ini, lo analiza o lo interpreta para que la aplicación conozca toda la estructura y valores del archivo ini y obtenga la lista de claves y valores?

+1

Es posible utilizar en lugar java.util.Properties, aunque no tiene secciones como los archivos .ini. –

+0

@mmyers: ese era el problema. Necesitaba secciones para esta herramienta que estoy haciendo. Estoy bastante seguro de que hay una manera de hacer esto con ini4j, simplemente no puedo encontrar la api, clase o tutorial correcto – codingbear

Respuesta

11

Sin garantías en este caso. Lo inventé en 5 minutos. Pero lee el ini que ya ha proporcionado sin más conocimiento de la propia ini (al lado de los conocimientos que se compone de varias secciones, cada una con un número de opciones.

Guess tendrá que averiguar el resto sí mismo.

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

salida ini4j Samples y ini4j Tutorials también. Como a menudo una biblioteca no está muy bien documentada.

+0

¡Acabo de descubrir cómo hacer lo que sea necesario! ¡Similar a la solución que has publicado! Gracias por su esfuerzo para ver esto. Tuve que pasar por API con conjeturas educativas para encontrar clases útiles :) – codingbear

2

no pude encontrar nada en los tutoriales de modo que entramos por la fuente, hasta que encontré el método entrySet. Con que puedes hacer esto:

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

Este código esencialmente vuelve a imprimir el archivo .ini en la consola. Su archivo de ejemplo produciría este resultado: (el orden puede variar)

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

Los métodos de interés son get() y el conjunto de claves()

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