Ecriture / lecture facile dans un fichier de configuration

Soyez le premier à donner votre avis sur cette source.

Snippet vu 24 954 fois - Téléchargée 27 fois

Contenu du snippet

Ce code très simple à déjà été présenté, mais je n'ai pas trouvé le code en integralité. (qui permette également de mettre a jour).

Donc.... Ce code permet de lire et d'ecrire des options dans un fichier de config en Java à l'aide de la classe properties. Vous pouvez même y mettre des commentaires en utilisant le # !

Exemple d'utilisation :

Configuration truc = new Configuration();
try {
truc.setConfig("test","max_connection","1000" );
truc.setConfig("test","max_connerie","0" );

System.out.println (truc.getConfig("test","max_connection"));
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();}

Source / Exemple :


/**

  • Classe : Configuration
  • Description :
  • La classe Configuration va obtenir et mettre à jour les infos de
  • configuration à partir des fichiers de configuration
  • stockés sous [rep_courant]/config
  • Le fichier doit existé ou une exception sera levée.
*
  • date : 8/05/2004
  • @author : PeeX Team
  • @version : 1.0
*
  • /
// Les import import java.io.FileInputStream; import java.io.FileOutputStream; import java.util.Properties; import java.lang.Exception; public class Configuration { /**
  • Methode : getConfig
  • Description :
  • La méthode getConfig va retourner l'information de configuration
  • désirée à partir d'un fichier de configuration
*
  • date : 8/05/2004
  • @param : String fichier : Le nom du fichier de configuration
  • @param : String key : La clé dont on veut obtenir la valeur
  • @return : String représentant la valeur de l'info
*
  • /
public String getConfig(String fichier, String key) throws Exception { //On construit l'adresse du fichier String leFichier = System.getProperty("user.dir") + "/config/" + fichier; // On fait pointer notre Properties sur ke fichier FileInputStream fis = new FileInputStream(leFichier); Properties config = new Properties(); config.load(fis); String tmp = config.getProperty(key); fis.close(); // C'est important de mettre à null, le garbage collector // passe plus vite ! leFichier = null; fis = null; config = null; if (tmp == null) { // On leve une exeption throw new Exception("La valeur correspondant à '" + key + "' n'existe pas dans le fichier '" + fichier+"'"); } return tmp; } /**
  • Methode : setConfig
  • Description :
  • La méthode setConfig va mettre à jour/ inserer l'information de configuration
  • désirée à partir dans un fichier de configuration
*
  • date : 8/05/2004
  • @param : String fichier : Le nom du fichier de configuration
  • @param : String key : La clé dont on veut obtenir la valeur
  • @param : String valeur : La valeur associée à la clé
  • @return : String représentant la valeur de l'info
*
  • /
public void setConfig(String fichier, String key, String valeur) throws Exception { // La petite feinte : Il faur recharger entièrement le fichier // et le réecrire. //On construit l'adresse du fichier String leFichier = System.getProperty("user.dir") + "/config/" + fichier; // On fait pointer notre Properties sur le fichier Properties config = new Properties(); FileInputStream fis = new FileInputStream(leFichier); config.load (fis); fis.close(); FileOutputStream fos = new FileOutputStream(leFichier); config.setProperty(key,valeur); config.store (fos,"Dernière mise a jour :"); // C'est important de mettre à null, le garbage collector // passe plus vite ! fos.close(); leFichier = null; fos = null; fis = null; config = null; } }

Conclusion :


Voilà, c'est bête comme chou ! En attendant vos réactions, bon codage !!!!

La PeeX Team !!!

A voir également

Ajouter un commentaire

Commentaires

Messages postés
1
Date d'inscription
vendredi 29 mars 2002
Statut
Membre
Dernière intervention
3 juin 2009

public void setConfig(String fichier, String key, String valeur)
{
String fullPath = null;
FileOutputStream fos = null;
Properties config = null;
FileInputStream fis = null;

// La petite feinte : Il faur recharger entièrement le fichier
// et le réecrire.

//On construit l'adresse du fichier
fullPath = System.getProperty("user.dir") + "/config/" + fichier;

try
{
config = new Properties();
if (fullPath != null)
{
File fileRes = new File(fullPath);
if (fileRes.isFile())
{
fis = new FileInputStream(fullPath);
config.load(fis);
fis.close();
}
}
if (fis == null)
{
fos = new FileOutputStream(fullPath, true);
}
else
{
fos = new FileOutputStream(fullPath);
}

config.setProperty(key, valeur);
config.store(fos, "Dernière mise a jour :");
fos.close();
}
catch (Exception e)
{
e.printStackTrace();
}
finally
{
fichier = null;
fos = null;
fis = null;
config = null;
}
}
Messages postés
1
Date d'inscription
vendredi 12 septembre 2008
Statut
Membre
Dernière intervention
12 septembre 2008

ça fonctionne bien ce code mais j'ai une question car il ne correspond pas tout à fait à mon cas.

J'ai un fichier de configuration qui contient des clés du type KEY=VALUE mais en plus j'ai des commentaires. Le problème c'est qu'avec le setProperty je perds tous les commentaires et l'ordre des clés du fichier d'origine. Il y a-t-il une solution pour venir juste mettre à jour la valeur de la clé (sans perdre l'ordre des clé et les commentaires)

Sinon ma solution serait de chercher dans le fichier la chaine "KEY=VALUE" et de la remplacer mais bon... setProperty semble prévu pour.
Messages postés
2
Date d'inscription
mardi 11 mai 2004
Statut
Membre
Dernière intervention
17 août 2004

Merci beaucoup pour ce code qui devrais me permmettre de gagner beaucoup de temps.
Bonne continuation :)
Messages postés
194
Date d'inscription
dimanche 3 mars 2002
Statut
Membre
Dernière intervention
19 décembre 2005
3
Supper ton code !
j'ai gagné un temps précieux ! merci !!

toutefois il y a un truc .. lorsque ton fichier n'existe pas, ca plante .. c'est normal .. tu commance à lire avant d'écrire ..

pour eviter la lecture puis l'ecriture tu a la methode append, celle ci ajoute directement ce que tu veux a la fin de ton fichier de plus si le fichier n'existe pas il est crée
elle a aussi l'aventage de ne pas charger le fichier en mémoire donc c'est bien si tu fait de log qui font 200 Mo !!

pour utiliser la methode append tu modifi lle setConfig comme suite :

public void setConfig(String fichier, String key, String valeur) throws Exception
{
// La petite feinte : Il faur recharger entièrement le fichier
// et le réecrire.

//On construit l'adresse du fichier
String leFichier = System.getProperty("user.dir") + "/config/" + fichier;

// On fait pointer notre Properties sur le fichier
Properties config = new Properties();

// on n'a plus besoin de lire le fichier .. donc plus de risque de bug fichier inexistant , en plus on ne charge pas en memoire le fichier donc gain de temps de d'espace memoire

//FileInputStream fis = new FileInputStream(leFichier);
//config.load (fis);
//fis.close();

//FileOutputStream fos = new FileOutputStream(leFichier);
// On ajoute true pour dire d'utilisé la methode append
FileOutputStream fos = new FileOutputStream(leFichier,true);

config.setProperty(key,valeur);

config.store (fos,"Dernière mise a jour :");
// C'est important de mettre à null, le garbage collector
// passe plus vite !
fos.close();
leFichier = null;
fos = null;
//fis = null; // ne serre plus !!
config = null;
}


Voila !!

et bonne prog a tous ;-)
TFlorian
Messages postés
8
Date d'inscription
mercredi 12 mai 2004
Statut
Membre
Dernière intervention
15 janvier 2005

Super, Le truc simple, bête, mais super util et qui fait gagner du temps ... Merci
Afficher les 6 commentaires

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.