[RESOLU]Enregistrement classe dans fichier

Enregistrement classe dans fichier [RESOLU] - Java - Programmation

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
 

Citation :

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

Citation :


nb user 1
C:\Users\fred\workspace\Projet\src\MonPackage\sauvegarde/sauvegarde.txt saved


 
Si je relance le serveur, tout ce passe bien, aussi  

Citation :

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

Citation :

¬í 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
Reply

Marsh Posté le 28-11-2007 à 11:27:22   

Reply

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.

Reply

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

Reply

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

Reply

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

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed