ECRITURE / LECTURE FACILE DANS UN FICHIER DE CONFIGURATION

harbaingan Messages postés 2 Date d'inscription mercredi 15 janvier 2003 Statut Membre Dernière intervention 8 juin 2004 - 8 juin 2004 à 19:06
Grouss Messages postés 1 Date d'inscription vendredi 29 mars 2002 Statut Membre Dernière intervention 3 juin 2009 - 3 juin 2009 à 12:11
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/23515-ecriture-lecture-facile-dans-un-fichier-de-configuration

Grouss Messages postés 1 Date d'inscription vendredi 29 mars 2002 Statut Membre Dernière intervention 3 juin 2009
3 juin 2009 à 12:11
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;
}
}
ibhow Messages postés 1 Date d'inscription vendredi 12 septembre 2008 Statut Membre Dernière intervention 12 septembre 2008
12 sept. 2008 à 12:17
ç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.
robo45 Messages postés 2 Date d'inscription mardi 11 mai 2004 Statut Membre Dernière intervention 17 août 2004
13 juil. 2006 à 16:41
Merci beaucoup pour ce code qui devrais me permmettre de gagner beaucoup de temps.
Bonne continuation :)
TFlorian Messages postés 194 Date d'inscription dimanche 3 mars 2002 Statut Membre Dernière intervention 19 décembre 2005 3
5 juil. 2005 à 09:16
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
adx77 Messages postés 8 Date d'inscription mercredi 12 mai 2004 Statut Membre Dernière intervention 15 janvier 2005
13 janv. 2005 à 11:04
Super, Le truc simple, bête, mais super util et qui fait gagner du temps ... Merci
harbaingan Messages postés 2 Date d'inscription mercredi 15 janvier 2003 Statut Membre Dernière intervention 8 juin 2004
8 juin 2004 à 19:06
Super la PeeX Team !!!!

Je cherchais un code source dans le genre depuis des mois, et faut avouer que les autres sources etaient pas aussi bandantes.

Chapeau : 10/10
Rejoignez-nous