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.
Es scheint, dass die INI-Datei kein striktes Format hat, daher werden wir dieses Mal auf die folgenden Formate abzielen.
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.
https://github.com/entan05/IniFileController
Ich habe es in eine Bibliothek geschafft. Derzeit kann es auch auf Android verwendet werden.
[Java] [Beispielcode] Ich habe meine eigene Lese- / Schreibbibliothek für INI-Dateien erstellt | http://javasampleokiba.blog.fc2.com/blog-entry-27.html
| Datum | Inhalt | 
|---|---|
| 2018/03/24 | Post | 
Recommended Posts