J'écris un remplacement instantané pour une application héritée en Java. L'une des conditions requises est que les fichiers ini utilisés par l'ancienne application doivent être lus tels quels dans la nouvelle application Java. Le format de ces fichiers ini est le style Windows commun, avec des sections d'en-tête et des paires clé = valeur, en utilisant # comme caractère pour les commentaires.
J'ai essayé d'utiliser la classe Properties de Java, mais bien sûr, cela ne fonctionnera pas s'il y a des conflits de noms entre différents en-têtes.
La question est donc de savoir quelle serait la manière la plus simple de lire ce fichier INI et d'accéder aux clés?
IniFile
cours a été retiré, essayezIni ini = new Ini(new File("/path/to/file"));
Wini
classe, comme illustré dans le didacticiel "One Minute"; leprefs.node("something").get("val", null)
n'a pas fonctionné comme je m'y attendais.Comme mentionné , ini4j peut être utilisé pour y parvenir. Laissez-moi vous montrer un autre exemple.
Si nous avons un fichier INI comme celui-ci:
Les éléments suivants doivent s'afficher
value
sur STDOUT:Consultez les didacticiels pour plus d'exemples.
la source
Aussi simple que 80 lignes:
la source
Voici un exemple simple mais puissant, utilisant la classe apache HierarchicalINIConfiguration :
La configuration Commons a un certain nombre de dépendances d'exécution . Au minimum, commons-lang et commons-logging sont requis. Selon ce que vous en faites, vous pouvez avoir besoin de bibliothèques supplémentaires (voir le lien précédent pour plus de détails).
la source
Ou avec l'API Java standard, vous pouvez utiliser java.util.Properties :
la source
Properties
classe n'obtient pas correctement les valeurs qui contiennent \native2ascii
pour d'autres encodages)En 18 lignes, étendant le
java.util.Properties
pour analyser en plusieurs sections:la source
Une autre option est qu'Apache Commons Config a également une classe pour le chargement à partir de fichiers INI . Il a quelques dépendances d'exécution , mais pour les fichiers INI, il ne devrait nécessiter que les collections Commons, la langue et la journalisation.
J'ai utilisé Commons Config sur des projets avec leurs propriétés et leurs configurations XML. Il est très facile à utiliser et prend en charge certaines fonctionnalités assez puissantes.
la source
Vous pouvez essayer JINIFile. Est une traduction du TIniFile de Delphi, mais pour java
https://github.com/SubZane/JIniFile
la source
Personnellement, je préfère Confucious .
C'est bien, car il ne nécessite aucune dépendance externe, il est minuscule - seulement 16K, et charge automatiquement votre fichier ini lors de l'initialisation. Par exemple
la source
La solution de hoat4 est très élégante et simple. Cela fonctionne pour tous les fichiers ini sains . Cependant, j'en ai vu beaucoup qui ont des caractères d'espace non échappés dans la clé .
Pour résoudre ce problème, j'ai téléchargé et modifié une copie de
java.util.Properties
. Bien que ce soit un peu peu orthodoxe et à court terme, les mods réels n'étaient que quelques lignes et assez simples. Je présenterai une proposition à la communauté JDK pour inclure les changements.En ajoutant une variable de classe interne:
Je contrôle le traitement lié à la recherche du point de séparation clé / valeur. J'ai remplacé le code de recherche de caractères d'espace par une petite méthode privée qui renvoie un booléen en fonction de l'état de la variable ci-dessus.
Cette méthode est utilisée à deux endroits dans la méthode privée
load0(...)
.Il existe également une méthode publique pour l'activer, mais il serait préférable d'utiliser la version d'origine de
Properties
si le séparateur d'espace n'est pas un problème pour votre application.S'il y a un intérêt, je serais prêt à publier le code dans mon
IniFile.java
dossier. Cela fonctionne avec les deux versions deProperties
.la source
En utilisant la réponse de @Aerospace, j'ai réalisé qu'il était légitime que les fichiers INI aient des sections sans valeurs-clés. Dans ce cas, l'ajout à la carte de niveau supérieur doit avoir lieu avant que des valeurs-clés ne soient trouvées, ex (mise à jour minimale pour Java 8):
la source
C'est aussi simple que ça .....
la source