[Java] [Android] INI-Datei lesen

00. Einleitung

Eine Möglichkeit, die Einstellungen in einer Datei in Java zu speichern, besteht darin, sie als .properties-Datei zu speichern. Es gibt jedoch Situationen, in denen Sie eine INI-Datei verwenden möchten, z. B. die Neuerstellung einer in C ++ in Java erstellten App (oder besser gesagt während dieser Zeit). Schreiben wir also einen Prozess, um ihn zu lesen.

01. Über die zu lesende INI-Datei

Es scheint, dass die INI-Datei kein striktes Format hat, daher werden wir dieses Mal auf die folgenden Formate abzielen.

  1. ** Kommentarzeile **
    Ignorieren Sie Zeilen, die mit '#' beginnen, als Kommentarzeilen.
    Es ist nicht möglich, einen Kommentar mitten in einem Satz zu beginnen.
  2. ** Schnittlinie **
    Zeilen, die mit '[' beginnen und mit ']' enden, werden als Abschnittszeilen betrachtet, und die eingeschlossene Zeichenfolge ist ein Abschnitt.
    Danach gefundene Parameter gehören zu diesem Abschnitt.
  3. ** Parameterzeile **
    Die Zeile mit '=' im Satz ist die Parameterzeile, die erste Seite, die zuerst angezeigt wird, ist der Schlüssel und die rechte Seite ist der Wert.
  4. ** Andere als die oben genannten **
    ignorieren

02. Hier ist das fertige Produkt.

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 zum Laden von IniFile
 */
public class IniFileLoader {
    // HashMap<section, HashMap<key, String>>Zu
    private HashMap<String, HashMap<String, String>> mDataMap;

    //Dateipfad
    private String mFilePath;

    //Ist das Laden abgeschlossen?
    private boolean mIsLoaded = false;

    /**
     *Laden Sie die angegebene Datei
     *
     * @param filePath Dateipfad
     * @return Gibt an, ob das Laden erfolgreich war
     */
    public boolean load(String filePath) {
        mFilePath = filePath;
        return loadProcess(filePath);
    }

    /**
     *Laden Sie die Datei neu, die Sie zuletzt geladen haben
     *
     * @return Gibt an, ob das Laden erfolgreich war
     */
    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();

            //Abteilungsname
            String section = null;
            //Schlüsselwert
            HashMap<String, String> map = new HashMap<>();
            while (line != null) {
                //Entfernen Sie Leerzeichen am Anfang und Ende der Zeilen
                line = line.trim();

                //Leerzeile
                if (isEmpty(line)) {
                    // no process
                }
                //Kommentarzeile
                else if (line.charAt(0) == '#') {
                    // no process
                }
                //Schnittlinie
                else if (line.charAt(0) == '[' && line.charAt(line.length() - 1) == ']') {
                    section = line.substring(1, line.length() - 1);
                    map = new HashMap<>();
                }
                //Parameterzeile
                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;
    }

    /**
     *Lesen Sie das Ergebnis(section, (key, value))von{@link HashMap}Rückkehr mit
     *
     * @return Das Ergebnis des Lesens{@link HashMap} 
     */
    public HashMap<String, HashMap<String, IniItem>> getAllDataMap() {
        if (mIsLoaded) {
            return mDataMap;
        }
        return null;
    }

    /**
     *Der angegebene Abschnitt des Leseergebnisses(key, value)von{@link Map}Rückkehr mit
     *
     * @Parameterabschnitt Abschnittsspezifikation
     * @return Der angegebene Abschnitt des Leseergebnisses
     */
    public Map<String, String> getSectionDataMap(String section) {
        if (mIsLoaded) {
            return mDataMap.get(section);
        }
        return null;
    }

    /**
     *Gibt den Wert des angegebenen Abschnitts und des angegebenen Schlüssels zurück
     *
     * @Parameterabschnitt Abschnittsspezifikation
     * @param key Schlüsselspezifikation
     * @return Angegebener Abschnitt, angegebener Schlüsselwert
     */
    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;
    }

    /**
     *Gibt zurück, ob der angegebene Abschnitt im Leseergebnis enthalten ist
     *
     * @Parameterabschnitt Abschnittsspezifikation
     * @Rückgabe, falls vorhanden{@code true}
     */
    public boolean containsSection(String section) {
        if (mIsLoaded) {
            return mDataMap.containsKey(section);
        }
        return false;
    }

    /**
     *Gibt zurück, ob der angegebene Schlüssel im angegebenen Abschnitt im Leseergebnis enthalten ist
     *
     * @Parameterabschnitt Abschnittsspezifikation
     * @param key Schlüsselspezifikation
     * @Rückgabe, falls vorhanden{@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}Stellen Sie fest, ob es leer ist
     *
     * @param str Beurteilungsziel
     * @return {@code String}Wenn leer ist{@code true}
     */
    private boolean isEmpty(String str) {
        return str == null || str.length() == 0;
    }
}

Sie lesen es einfach Zeile für Zeile und machen ein Urteil.

03. Hier ist, was ich in eine Bibliothek gemacht habe.

https://github.com/entan05/IniFileController

Ich habe es in eine Bibliothek geschafft. Derzeit kann es auch auf Android verwendet werden.

98. Referenz

[Java] [Beispielcode] Ich habe meine eigene Lese- / Schreibbibliothek für INI-Dateien erstellt | http://javasampleokiba.blog.fc2.com/blog-entry-27.html

99. Verlauf aktualisieren

Datum Inhalt
2018/03/24 Post

Recommended Posts

[Java] [Android] INI-Datei lesen
Java-Eigenschaftendatei lesen
Lesen Sie die Java-Eigenschaftendatei in C #
Erstellung von Java-Dateien
Lesen Sie die xlsx-Datei in Java mit Selenium
Lesen Sie eine Zeichenfolge in einer PDF-Datei mit Java
[Java] Dateien in src / main / resources lesen
[Java] Dateisystembetrieb
Lesen Sie JSON in Java
Java (geteilte Quelldatei)
Java Core: gehackte Core-Datei
Lesen Sie die Java HashMap-Quelle
<java> Zip-Datei lesen und direkt in String konvertieren
So lesen Sie Ihre eigene YAML-Datei (*****. Yml) in Java
Lesen Sie Binärdateien in Java 1
Bearbeiten von ini in Java: ini4j
Lesen Sie WAV-Daten als Byte-Array unter Android Java
[Java] Erstellen Sie eine temporäre Datei
Lesen Sie Binärdateien in Java 2
Java-Anfänger lesen Hello World
[Android / Java] Erfahren Sie mehr über DataBinding
Textdateien, die in Ressourcen in Java abgelegt sind, können nicht gelesen werden, wenn sie beschädigt sind
Lesen Sie die ersten 4 Bytes der Java-Klassendatei und geben Sie CAFEBABE aus
Lesen Sie Elemente mit Kommas in CSV-Dateien ohne Aufteilung (Java).
Lesen und generieren Sie QR-Code [Android]
Versuchen Sie, Android Hilt in Java zu implementieren
Einfache Implementierung des Durchsuchens von Android-Dateien
Laden Sie Dateien mit Java HttpURLConnection hoch
Lesen Sie CSV in Java (Super CSV Annotation)
Führen Sie node.js von Android Java aus (Verarbeitung)
Lesen Sie die Dump-Datei mit MySQL von Docker
Führen Sie eine Batchdatei von Java aus
Entpacken Sie die Zip-Datei in Java
[Android Studio] [Java] Memos und Links lernen
Protokollausgabe in Datei in Java
Beispiel für eine EXCEL-Dateiaktualisierung mit JAVA
Informationen zur Dateikopierverarbeitung in Java
Wiedereinführung von Java8, das seit Android Studio 2.4 verfügbar ist
[Android] Konvertieren Sie Android Java-Code in Kotlin
Lesen der log4j-Einstellungsdatei in einem Java-Projekt, das in der JAR-Datei Memo zusammengestellt ist