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.
Il semble que le fichier .ini n'ait pas de format strict, nous allons donc cette fois cibler les formats suivants.
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.
https://github.com/entan05/IniFileController
J'en ai fait une bibliothèque. Pour le moment, il peut également être utilisé sur Android.
[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
Date | Contenu |
---|---|
2018/03/24 | Publier |
Recommended Posts