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