[Java] [Android] Lire le fichier ini

00. Présentation

Une façon d'enregistrer les paramètres dans un fichier Java consiste à l'enregistrer en tant que fichier .properties. Cependant, il y a des moments où vous souhaitez utiliser un fichier .ini, comme recréer une application créée en C ++ en Java (ou plutôt, pendant ce temps). Alors, écrivons un processus pour le lire.

01. À propos du fichier .ini à lire

Il semble que le fichier .ini n'ait pas de format strict, nous allons donc cette fois cibler les formats suivants.

  1. ** Ligne de commentaire **
    Ignorez les lignes commençant par «#» comme lignes de commentaire.
    Il n'est pas possible de commencer un commentaire au milieu d'une phrase.
  2. ** Ligne de coupe **
    Les lignes qui commencent par «[» et se terminent par «]» sont considérées comme des lignes de section, et la chaîne incluse est une section.
    Les paramètres trouvés par la suite appartiennent à cette section.
  3. ** Ligne de paramètres **
    La ligne avec «=» dans la phrase est la ligne de paramètre, le côté gauche qui apparaît en premier est la clé et le côté droit est la valeur.
  4. ** Autre que ce qui précède **
    ignorer

02. Voici le produit fini.

IniFileLoader.java


import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;

/**
 *Loader pour charger IniFile
 */
public class IniFileLoader {
    // HashMap<section, HashMap<key, String>>À
    private HashMap<String, HashMap<String, String>> mDataMap;

    //Chemin du fichier
    private String mFilePath;

    //Le chargement est-il terminé?
    private boolean mIsLoaded = false;

    /**
     *Charger le fichier spécifié
     *
     * @param filePath Chemin du fichier
     * @retour Si le chargement a réussi
     */
    public boolean load(String filePath) {
        mFilePath = filePath;
        return loadProcess(filePath);
    }

    /**
     *Recharger le fichier que vous avez essayé de charger pour la dernière fois
     *
     * @retour Si le chargement a réussi
     */
    public boolean reload() {
        return isEmpty(mFilePath) && loadProcess(mFilePath);
    }

    private boolean loadProcess(String filePath) {
        mIsLoaded = false;
        mDataMap = new HashMap<>();
        try {
            FileReader fileReader = new FileReader(new File(filePath));
            BufferedReader br = new BufferedReader(fileReader);
            String line = br.readLine();

            //Nom de la section
            String section = null;
            //Valeur clé
            HashMap<String, String> map = new HashMap<>();
            while (line != null) {
                //Supprimer les espaces au début et à la fin des lignes
                line = line.trim();

                //Ligne blanche
                if (isEmpty(line)) {
                    // no process
                }
                //Ligne de commentaire
                else if (line.charAt(0) == '#') {
                    // no process
                }
                //Ligne de coupe
                else if (line.charAt(0) == '[' && line.charAt(line.length() - 1) == ']') {
                    section = line.substring(1, line.length() - 1);
                    map = new HashMap<>();
                }
                //Ligne de paramètres
                else if (line.length() >= 3 && line.contains("=") && line.length() > line.indexOf("=") + 1) {
                    String key = line.substring(0, line.indexOf("="));
                    String value = line.substring(line.indexOf("=") + 1);

                    map.put(key, value);
                    mDataMap.put(section, map);
                }

                line = br.readLine();
            }
            br.close();
        } catch (IOException e) {
            return false;
        }
        mIsLoaded = true;
        return true;
    }

    /**
     *Lisez le résultat(section, (key, value))de{@link HashMap}Retour avec
     *
     * @return Le résultat de la lecture{@link HashMap} 
     */
    public HashMap<String, HashMap<String, IniItem>> getAllDataMap() {
        if (mIsLoaded) {
            return mDataMap;
        }
        return null;
    }

    /**
     *La section spécifiée du résultat de lecture(key, value)de{@link Map}Retour avec
     *
     * @param section Spécification de section
     * @return La section spécifiée du résultat de lecture
     */
    public Map<String, String> getSectionDataMap(String section) {
        if (mIsLoaded) {
            return mDataMap.get(section);
        }
        return null;
    }

    /**
     *Renvoie la valeur de la section spécifiée, clé spécifiée
     *
     * @param section Spécification de section
     * @param key Spécification de la clé
     * @return Section spécifiée, valeur de clé spécifiée
     */
    public String getValue(String section, String key) {
        if (mIsLoaded) {
            HashMap<String, String> map = mDataMap.get(section);
            if (map != null) {
                return map.get(key);
            }
        }
        return null;
    }

    /**
     *Renvoie si la section spécifiée est dans le résultat de lecture
     *
     * @param section Spécification de section
     * @retourne s'il existe{@code true}
     */
    public boolean containsSection(String section) {
        if (mIsLoaded) {
            return mDataMap.containsKey(section);
        }
        return false;
    }

    /**
     *Renvoie si la clé spécifiée dans la section spécifiée est dans le résultat de la lecture
     *
     * @param section Spécification de section
     * @param key Spécification de la clé
     * @retourne s'il existe{@code true}
     */
    public boolean containsKey(String section, String key) {
        if (mIsLoaded) {
            HashMap<String, IniItem> map = mDataMap.get(section);
            return map != null && map.containsKey(key);
        }
        return false;
    }

    /**
     * {@code String}Déterminer si est vide
     *
     * @param str Cible du jugement
     * @return {@code String}Si est vide{@code true}
     */
    private boolean isEmpty(String str) {
        return str == null || str.length() == 0;
    }
}

Vous venez de le lire ligne par ligne et de porter un jugement.

03. Voici ce que j'ai transformé en bibliothèque.

https://github.com/entan05/IniFileController

J'en ai fait une bibliothèque. Pour le moment, il peut également être utilisé sur Android.

98. Référence

[Java] [Exemple de code] J'ai créé ma propre bibliothèque de lecture / écriture de fichier INI | http://javasampleokiba.blog.fc2.com/blog-entry-27.html

99. Historique des mises à jour

Date Contenu
2018/03/24 Publier

Recommended Posts

[Java] [Android] Lire le fichier ini
Lire le fichier de propriétés Java
Lire le fichier de propriétés Java en C #
création de fichier java
Lire le fichier xlsx en Java avec Selenium
Lire une chaîne dans un fichier PDF avec Java
[Java] Lire les fichiers dans src / main / resources
[Java] Fonctionnement du système de fichiers
Lire JSON en Java
java (fichier source fractionné)
noyau java: fichier de base haché
Lire la source Java HashMap
<java> Lire le fichier Zip et le convertir directement en chaîne
Comment lire votre propre fichier YAML (*****. Yml) en Java
Lire des fichiers binaires en Java 1
Modifier ini en Java: ini4j
Lire les données WAV sous forme de tableau d'octets sur Android Java
[Java] Créer un fichier temporaire
Lire des fichiers binaires dans Java 2
Les débutants en Java lisent Hello World
[Android / Java] En savoir plus sur DataBinding
Les fichiers texte placés dans des ressources en Java ne peuvent pas être lus lorsqu'ils sont mis en jarr
Lire les 4 premiers octets du fichier de classe Java et générer CAFEBABE
Lire les éléments contenant des virgules dans les fichiers CSV sans fractionnement (Java)
Lire et générer un code QR [Android]
Essayez d'implémenter Android Hilt en Java
Implémentation facile de la navigation de fichiers Android
Télécharger des fichiers à l'aide de Java HttpURLConnection
Lire CSV en Java (annotation Super CSV)
Exécutez node.js depuis Android Java (traitement)
Lire le fichier de vidage avec MySQL de Docker
Exécuter le fichier de commandes à partir de Java
Décompressez le fichier zip en Java
[Android Studio] [Java] Mémos et liens d'apprentissage
Enregistrer la sortie dans un fichier en Java
Exemple de mise à jour de fichier EXCEL avec JAVA
A propos du traitement de la copie de fichiers en Java
Remarques sur le traitement des threads Android (java)
Réintroduction de Java8, disponible depuis Android Studio 2.4
[Android] Convertir le code Java Android en Kotlin
Comment lire le fichier de paramètres log4j dans un projet Java assemblé dans un fichier jar Memo