Enregistrement classe dans fichier [RESOLU] - Java - Programmation
Marsh Posté le 28-11-2007 à 12:08:28
C'est normal, il serialise ta classe domain, et normalement lors du load(..) si tu fais un System.out.println("nb user "+domain.getNbUtilisateur()); tu devrais avoir la meme reponse que lors du save(...) ce qu'il y a dans le fichier on s'en fout un peu, c'est java qui gere.
Marsh Posté le 28-11-2007 à 13:18:48
ben voila c ca le probleme
quand je recupere j'ai plus rien, c comme si il m'avais mis une classe vide
System.out.println("nb user "+domain.getNbUtilisateur());
je remet ca apres la reouverture, et voila ce qu'il me met, c ca que je comprend pas.
nb user 0
Marsh Posté le 30-11-2007 à 11:12:44
Salut,
Peut-être ton champ nbUtilisateur est-il déclaré transient dans ta classe Domaine ? Pense aussi à fermer tes flux sur les ObjectOutputStream
Marsh Posté le 01-12-2007 à 16:46:38
j'ai trouve mon erreur
ca venait pas de mes methodes mais de ma classe,
ca venait d'une hasthable qui etait initialisé des sa declaration,
et nan dans le contructeur, voila j'ai change ca, et depuis tout marche Merci pour vos aides
Marsh Posté le 28-11-2007 à 11:27:22
Bonjour
Voila, a la fermeture de mon logiciel je dois enregistrer ma classe principale dans un fichier
voici les methodes de sauvegarde et de récupération
void recuperation_Sauvegarde()
{
sauvegarde =new File(nom_fichier_sauvegarde);
boolean exists =sauvegarde.exists();
if (exists) {
System.out.println("Le fichier existe" );
if(sauvegarde.length()==0){
System.out.println("Le fichier est vide" );
domain=new Domaine(nomDomaine);
User u=new User(1,"admin","admin",false);
domain.ajoutUtilisateur(u);
}else{
System.out.println("Le fichier n'est pas vide" );
if(!load(nom_fichier_sauvegarde)){
System.out.println("Le fichier n'est pas au bon format, on reiniatilise le serveur " );
domain=new Domaine(nomDomaine);
User u=new User(1,"admin","admin",false);
domain.ajoutUtilisateur(u);
}
}
} else {
System.out.println("Le fichier n'existe pas" );
domain=new Domaine(nomDomaine);
User u=new User(1,"admin","admin",false);
domain.ajoutUtilisateur(u);
}
}
public void save(String file){
try{
// On crée la sortie vers le fichier
ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream(System.getProperty("user.dir" ) +"/"+file));
System.out.println("nb user "+domain.getNbUtilisateur());
out.writeObject((Domaine)domain);
System.out.println(System.getProperty("user.dir" ) + "\\" + file + " saved" );
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
public boolean load(String file){
boolean retour=true;
try{
// crée le fichier
FileInputStream fichier = new FileInputStream(System.getProperty("user.dir" ) +"/"+file);
// On crée l'entrée à partir du fichier
ObjectInputStream ois = new ObjectInputStream(fichier);
// On charge la liste à partir du fichier
domain =(Domaine)ois.readObject();
System.out.println(System.getProperty("user.dir" ) + "\\" + file + " chargé" );
} catch (FileNotFoundException e) {
e.printStackTrace();
retour=false;
} catch (IOException e) {
e.printStackTrace();
retour=false;
} catch (ClassNotFoundException e) {
e.printStackTrace();
retour=false;
}
return retour;
}
donc voila, quand j'eteins le serveur, tout ce passe correctement il m'enregistre bien dans le fichier aucune erreur(grace a la methode save).
juste avant de quitter tout, je fais afficher le nombre d'utilisateur inscrit dans le domaine
nb user 1
C:\Users\fred\workspace\Projet\src\MonPackage\sauvegarde/sauvegarde.txt saved
Si je relance le serveur, tout ce passe bien, aussi
Le fichier existe
Le fichier n'est pas vide
C:\Users\fred\workspace\Projet\src\MonPackage\sauvegarde/sauvegarde.txt chargé
mais en faite voila mon probleme, apparament la sauvegarde il me met rien dans le fichier
voici la seul chose qui me met dans le fichier
¬í sr MonPackage.Domaine\AÞI˜Ô xp
J'ai deja utilise ces methodes qui marcher pour un autre truc projet, mais la j'ai reteste ca marche plus,ca fait pareil
alors est ce ce le fait que je suis sous vista, je sais pas je comprend pas trop
si vous avez des methode pour faire la meme chose je suis preneur
Merci
Message édité par infoman64 le 01-12-2007 à 16:46:56