Comment sauver & lire des paramètres dans un fichier?

Signaler
Messages postés
125
Date d'inscription
lundi 26 avril 2004
Statut
Membre
Dernière intervention
17 juin 2011
-
Messages postés
1155
Date d'inscription
samedi 17 janvier 2004
Statut
Membre
Dernière intervention
29 avril 2011
-
Salut à tous,

(Voila un question supplémentaire sur le forum, c'est normal, je débute donc j'interroge plus que je réponds).

:question) Voici ma question:
j'ai un petit programme qui tourne (en JAVA bien sûr :big) ) pas trop mal et j'aimerais sauvegarder des données importantes en cas de coupure de courant. Ces infos seraient du genre; adresse du serveur, nom de mon instance de programme, un long offset etc... Bien sûr la liste peut s'agrandir.

Je voudrais donc faire un fichier texte que j'interroge au démarrage et que je modifie de temps en temps, dans ce style:
IP_server : 144.20.18.24
offset : 12248763442
etc...
Existe-t-il des 'trucs' (truc = fonction ou méthode :clown) ) qui permettent de lire et d'écrire facilement des données dans un fichier.
J'ai entendu parler des classes serializable mais je sais comment ça marche. %-6

Merci.
:kisses)
Signé: Egalon qui comprend difficilement

9 réponses

Messages postés
649
Date d'inscription
mardi 8 juin 2004
Statut
Membre
Dernière intervention
9 septembre 2004
7
Tu fais une classe

public Data implements Serializable{
private String host;
//etc etc

public data(){
}

public String getHost(){
return host;
}

public void setHost(String host){
this.host=host;
}

//etc etc
}

Apres t'utilises par

ObjectOutputStream oos=new ObjectOutputStream(new FileOutputStream(new File(mmonfichier)));

ois.writeObject(data);

et

ObjectInputStream ois=new ObjectInputStream(new FileInputStream(new File(mmonfichier)));

Data data=ois.readObject();

Dans data le constructeur par defaut doit toujours etre present

Le fichier ne sera pas un fichier texte

Si tu fait une modif sur la classe Data tu pourra plus lire t'es ancien fichier.
Messages postés
125
Date d'inscription
lundi 26 avril 2004
Statut
Membre
Dernière intervention
17 juin 2011

Merci pour cette réponse nette et précise.
:) Je dois donc tout me taper à la main pour obtenir un fichier texte?

J'ai déjà commencé un truc qui lit la chaine de caractère suivante dans un fichier texte. L'écriture dans le fichier, ce sera pour demain matin.

Je m'explique au cas ou ce serait pas clair:

fichier texte (qui sert de test):
gluglu truc
machin chose 
bidule


et ma classe permet de récuperer le 2eme élément:

la fonction Read(machin) renvoie chose
et Read(bidule) renvoie un espace.
On peut ainsi transformer la chaine renvoyée dans le type que je veux.

OU
un exemple plus utile:

adresse_server 192.168.0.4
port_server 4500
offset 1234775
un_nom_bidon toto


et je récupère une info:
Server = InetAddress.getByName(monFichier.Read(adresse_server ));


Tu crois que ca peux intéresser d'autres personnes? Je dois publier ma 1ère source?

Merci encore ;)

Signé: Egalon qui comprend difficilement
Messages postés
2113
Date d'inscription
samedi 8 novembre 2003
Statut
Contributeur
Dernière intervention
6 octobre 2012
11
GodConan :clown)

ben tu peu aussi utiliser les class Properties et Pref ;o)
qui possede des methode d archivage

;o) tu peu meme te servir de la registry de l OS pour sauver t data.... ;o)

++
Messages postés
125
Date d'inscription
lundi 26 avril 2004
Statut
Membre
Dernière intervention
17 juin 2011

Ben euh.... :shy)
Je connais pas c'est quoi ça :question) :question) :question)
Ca sauvegarde des données meme si il y a plus de courant?
Ca marche comme des fichiers'On peut y accèder en dehors du programme?
Pour la base de registre, oublie j'en ai pas. Je bosse sur un module style PC/104, alors, y a pas d'OS.

Tu peux m'en dire plus?
Merci

Signé: Egalon qui comprend difficilement
Messages postés
1155
Date d'inscription
samedi 17 janvier 2004
Statut
Membre
Dernière intervention
29 avril 2011
8
Salut,

les Properties serait le meilleur moyen pour ce que tu cherches.
Un fichier property (*.properties) est un fichier normalisé de la forme suivante :
adresse_server = 192.168.0.4
port_server = 4500
offset =1234775
un_nom_bidon = toto

On a des informations (après le =) identifiées par une clé (avant le =). La classe java.util.Property permet de lire un tel fichier. Ensuite on peut récupérer les infos en donnant la clé souhaitée.

Pour la lecture
Property property =new Property();
property.load(new FileInputStream("fichier.properties"));
String ipServer=property.getProperty("adresse_server");


Pour l'écriture

property.store(new FileInputStream("fichier.properties"),null);
Messages postés
2113
Date d'inscription
samedi 8 novembre 2003
Statut
Contributeur
Dernière intervention
6 octobre 2012
11
GodConan :clown)

a la place de "fichier.properties" ;o) use plusto this.getClass().getName() + ".properties" ;o)

++
Messages postés
125
Date d'inscription
lundi 26 avril 2004
Statut
Membre
Dernière intervention
17 juin 2011

Ca a l'air super votre truc.
8-)
C'est juste que je viens de finir de m'emmer... :(
à tout ecrire avec de String et des positions dans les fichiers.
Je crois que votre soluce est certainement moins lourde à mettre en oeuvre.
Donc je vais de ce pas essayer.

Merci les gars.
;)
Signé: Egalon qui comprend difficilement
Messages postés
125
Date d'inscription
lundi 26 avril 2004
Statut
Membre
Dernière intervention
17 juin 2011

Trop bien et en plus ça marche bien. 8-)
(J'ai pas essayé avec une valeur qui contiendrait un '\n', mais sûr que ca planterait bien.)

(Kirua12, t'as fait deux petites erreurs pour l'écriture c'est
outputStream (c'est évident) et les property se déclarent en properties, mais c'est pas grave j'avais trouvé tout de suite. ;) )

Pis si un jour ça intéresserait quelqu'un d'autre, voici mon code: :shy)

public class testProperty {
        
public static void main(String[] aArg) 
    {try{	Properties property =new Properties(); //creation d'un objet des correspondances clé <=> valeur
property.load(new FileInputStream("fichier.properties")); // on charge ces correspondances à partir d'un fichier
property.setProperty("adresse_server","cornichons à la mayonnaise.");
//on modifie ce qu'on veut.
property.store(new FileOutputStream("fichier.properties"),null);
// on sauvegarde le TOUT dans le fichier.
property.load(new FileInputStream("fichier.properties"));
//on charge le fichier quand on en a besoin.
String ipServer=property.getProperty("adresse_server");
//on lit la correspondance avec une clé.
System.out.println(ipServer);
//on en fait ce qu'on en veut.
}catch(Throwable err){System.out.println("Ca a merdé!");};
}// et si ca plantait???
}


Merci encore (Pour kirua12: je compte même plus les coups de pouce que tu m'as donné).

Signé: Egalon qui comprend difficilement
Messages postés
1155
Date d'inscription
samedi 17 janvier 2004
Statut
Membre
Dernière intervention
29 avril 2011
8
c'était pour voir si tu suivais :big)