Estoy escribiendo un reemplazo directo para una aplicación heredada en Java. Uno de los requisitos es que los archivos ini que usaba la aplicación anterior deben leerse tal cual en la nueva aplicación Java. El formato de estos archivos ini es el estilo común de Windows, con secciones de encabezado y pares clave = valor, utilizando # como carácter para comentar.
Intenté usar la clase Propiedades de Java, pero, por supuesto, eso no funcionará si hay conflictos de nombres entre diferentes encabezados.
Entonces, la pregunta es, ¿cuál sería la forma más fácil de leer este archivo INI y acceder a las claves?
IniFile
clase se sacó, pruebaIni ini = new Ini(new File("/path/to/file"));
Wini
clase, como se ilustra en el tutorial "Un minuto"; elprefs.node("something").get("val", null)
no funcionó de la manera que esperaba.Como se mencionó , ini4j se puede usar para lograr esto. Permítanme mostrarles otro ejemplo.
Si tenemos un archivo INI como este:
Lo siguiente debería mostrarse
value
en STDOUT:Consulte los tutoriales para ver más ejemplos.
fuente
Tan simple como 80 líneas:
fuente
Aquí hay un ejemplo simple pero poderoso, usando la clase apache HierarchicalINIConfiguration :
Commons Configuration tiene varias dependencias de tiempo de ejecución . Como mínimo, se requieren commons-lang y commons-logging . Dependiendo de lo que esté haciendo con él, es posible que necesite bibliotecas adicionales (consulte el enlace anterior para obtener más detalles).
fuente
O con la API estándar de Java, puede usar java.util.Properties :
fuente
Properties
clase no obtiene correctamente los valores que contienen \native2ascii
para otras codificaciones)En 18 líneas, extendiendo el
java.util.Properties
para analizar en múltiples secciones:fuente
Otra opción es Apache Commons Config que también tiene una clase para cargar desde archivos INI . Tiene algunas dependencias de tiempo de ejecución , pero para los archivos INI solo debería requerir colecciones, lang y registro de Commons.
He usado Commons Config en proyectos con sus propiedades y configuraciones XML. Es muy fácil de usar y admite algunas funciones bastante potentes.
fuente
Podrías probar JINIFile. Es una traducción del TIniFile de Delphi, pero para java
https://github.com/SubZane/JIniFile
fuente
Personalmente prefiero Confucious .
Es bueno, ya que no requiere dependencias externas, es pequeño, solo 16K y carga automáticamente su archivo ini en la inicialización. P.ej
fuente
La solución de hoat4 es muy elegante y sencilla. Funciona para todos los archivos ini cuerdos . Sin embargo, he visto muchos que tienen caracteres de espacio sin escape en la clave .
Para solucionar esto, he descargado y modificado una copia de
java.util.Properties
. Aunque esto es un poco poco ortodoxo y de corto plazo, las modificaciones reales eran solo unas pocas líneas y bastante simples. Presentaré una propuesta a la comunidad de JDK para incluir los cambios.Añadiendo una variable de clase interna:
Yo controlo el procesamiento relacionado con la exploración del punto de separación clave / valor. Reemplacé el código de búsqueda de caracteres de espacio con un pequeño método privado que devuelve un booleano según el estado de la variable anterior.
Este método se utiliza en dos lugares dentro del método privado
load0(...)
.También hay un método público para activarlo, pero sería mejor usar la versión original de
Properties
si el separador de espacios no es un problema para su aplicación.Si hay interés, estaría dispuesto a publicar el código en mi
IniFile.java
archivo. Funciona con cualquier versión deProperties
.fuente
Usando la respuesta de @Aerospace, me di cuenta de que es legítimo que los archivos INI tengan secciones sin valores clave. En este caso, la adición al mapa de nivel superior debe ocurrir antes de que se encuentren valores-clave, por ejemplo (mínimamente actualizado para Java 8):
fuente
Es tan simple como esto .....
fuente