Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 07/08/2011, à 16:52

wawan60

[Résolu] - [JAVA] Sérialisation et réutilisation d'objets sauvegardés

Bonjour,

De retour sur un vieux projet, je me rends compte qu'il m'est impossible de réeffectuer des test sur des objets sauvegardés, et ensuite restaurés. Exemple : je crée :

Nom : pokemon
Date : 1995
Editeur : Nintendo

Ceci est un objet Jeux. une fois créer je peux effectuer des test qui aboutiront, exemple :

if(this.listJeux.get(i).getNom()=="pokemon"){
syso("ok");
}

J'obtiens : ok 

La tout est normal, je sauvegarde dans Jeux.txt que je réouvre à l'éxécution de mon programme, et je veux vérifié que j'ai un jeux pokemon. Je sais qu'il éxiste car je peux le voir, mais malgrès sa, ma petite condition ci-dessus ne me renvois plus rien.
Donc je ne comprends pas trop, j'ai lu des documentation sur la sérialisation/dé-sérialisation, mais en vain.

Les méthodes concernées et utilisées sont : public Object[][] tabJeux(String string) et public Object[][] tabJeuxConsole(String string)

Voici un morceau du code en question :

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.EOFException;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.util.ArrayList;
import java.util.List;


public class ListJeux{
    
    List<Jeux> lesJeux;

    public ListJeux() {
        this.lesJeux = new ArrayList<Jeux>();
    }
    
    public void ajouterJeux(Jeux c){
        this.lesJeux.add(c);
    }    
    
    public void saveJeux(){        
        try {
            ObjectOutputStream oos = new ObjectOutputStream(new BufferedOutputStream(new FileOutputStream(new File("Jeux.txt"))));
            for(int i=0; i<this.lesJeux.size();i++){
                oos.writeObject(lesJeux.get(i));                
            }
            oos.close();           
           }
        catch (FileNotFoundException ex){
            ex.printStackTrace();
            }
        catch (IOException ex){
            ex.printStackTrace();
            }
    }
   
   public void restoreJeux(){
       try{
           ObjectInputStream ois = new ObjectInputStream(new BufferedInputStream(new FileInputStream(new File("Jeux.txt"))));
           try{
               while(true){
                   this.lesJeux.add((Jeux)ois.readObject());
               }               
           }
           catch(EOFException e){}
           ois.close();
       }
       catch (FileNotFoundException e){
           e.printStackTrace();
       }
       catch (IOException e) {
           e.printStackTrace();
       } catch (ClassNotFoundException e) {
        e.printStackTrace();
       }
   }
   
public Object[][] tabJeux(){
        Object[][] donnees = new Object[this.lesJeux.size()][6];
        for(int i=0;i<this.lesJeux.size();i++){
            donnees[i][0] = this.lesJeux.get(i).getNom();
            donnees[i][1] = this.lesJeux.get(i).getEditeur();
            donnees[i][2] = this.lesJeux.get(i).getStyle();        
            donnees[i][3] = this.lesJeux.get(i).getConsole();        
            donnees[i][4] = this.lesJeux.get(i).getDate();        
            donnees[i][5] = this.lesJeux.get(i).getPrix();        
        }
        return donnees;
   }
   
   public String[] tabJeuxMenu(){
        String[] titreColonnes = { 
           "Nom","Editeur", "Style", "Console", "Date", "Prix"};
        return titreColonnes; 
   }

    public Object[][] tabJeux(String string) {
        ArrayList<Jeux> select = new ArrayList<Jeux>();
        System.out.println("Jeux cherchées : " + string);
        System.out.println("mes jeux : \n");
        for(int i=0;i<this.lesJeux.size();i++){
            System.out.println(this.lesJeux.get(i).getStyle());
            if(this.lesJeux.get(i).getStyle()==string){
                select.add(this.lesJeux.get(i));    

                System.out.println("trouvé              : " + this.lesJeux.get(i));
            }
        }
        Object[][] donnees = new Object[select.size()][6];
        for(int i=0;i<select.size();i++){
            donnees[i][0] = select.get(i).getNom();
            donnees[i][1] = select.get(i).getEditeur();
            donnees[i][2] = select.get(i).getStyle();        
            donnees[i][3] = select.get(i).getConsole();        
            donnees[i][4] = select.get(i).getDate();        
            donnees[i][5] = select.get(i).getPrix();        
        }
        return donnees;
    }

    public Object[][] tabJeuxConsole(String string) {
        ArrayList<Jeux> select = new ArrayList<Jeux>();
        System.out.println("console cherchée : " + string);
        for(int i=0;i<this.lesJeux.size();i++){
            System.out.println(this.lesJeux.get(i).getConsole());
            if(this.lesJeux.get(i).getConsole()==string){
                select.add(this.lesJeux.get(i));    

                System.out.println("trouvé              : " + this.lesJeux.get(i));
            }
        }
        Object[][] donnees = new Object[select.size()][6];
        for(int i=0;i<select.size();i++){
            donnees[i][0] = select.get(i).getNom();
            donnees[i][1] = select.get(i).getEditeur();
            donnees[i][2] = select.get(i).getStyle();        
            donnees[i][3] = select.get(i).getConsole();        
            donnees[i][4] = select.get(i).getDate();        
            donnees[i][5] = select.get(i).getPrix();        
        }
        return donnees;
    }
   
   public String toString(){
       String tmp ="";
       for(int i=0;i<this.lesJeux.size();i++){
           tmp = tmp + this.lesJeux.get(i);
       }
       return tmp;
   }
}

Et un éxemple d'utilisation :

---------------------- Liste içi de mes jeux
nom : Dirt 3
console : Xbox 360

nom : Crysis 2
console : Xbox 360

nom : Uncharted 2
console : Playstation 3

nom : Sonic
console : Megadrive
------------------------------------------------
console cherchée : Megadrive                    <-Içi je cherche un jeux megadrive ( donc içi mon sonic )
Xbox 360                                                     <- j'ai un jeux xbox360
Xbox 360                                                     <- j'ai un jeux xbox360
Playstation 3                                               <- j'ai un jeux ps3
Megadrive                                                   <- j'ai un jeux megadrive

Mais mon tableau de retour est vide, et donc il ne trouve aucun jeux megadrive

Après toute ces explication, je vous remercie de m'aider tongue

Dernière modification par wawan60 (Le 07/08/2011, à 19:57)


Mon site -> www.retro-wuseum.hostzi.com
Grace Hopper : Pour moi, la programmation est plus qu'un art appliqué important. C'est aussi une ambitieuse
quête menée dans les tréfonds de la connaissance

Hors ligne

#2 Le 07/08/2011, à 18:16

Respawner

Re : [Résolu] - [JAVA] Sérialisation et réutilisation d'objets sauvegardés

Attention tu commets une faute que j'ai vu assez souvent.

if(this.listJeux.get(i).getNom()=="pokemon")

Ça en Java ça compare les références des deux chaînes de caractères et non le contenu des chaînes.
Il faudrait tester ton code avec quelque chose comme ça plutôt.

if(this.listJeux.get(i).getNom().equals("pokemon"))

Hors ligne

#3 Le 07/08/2011, à 18:46

wawan60

Re : [Résolu] - [JAVA] Sérialisation et réutilisation d'objets sauvegardés

Ah oui !!! Voilà ce que c'est d'oublier les cours tongue, merci big_smile

Je vais tester. Par contre sa n'explique pas pourquoi avant la sauvegarde, le test fonctionne et ensuite non.

J'éditerais pour informer du changement.

EDIT : Voilà c'était bien sa le problème, merci

Dernière modification par wawan60 (Le 07/08/2011, à 18:47)


Mon site -> www.retro-wuseum.hostzi.com
Grace Hopper : Pour moi, la programmation est plus qu'un art appliqué important. C'est aussi une ambitieuse
quête menée dans les tréfonds de la connaissance

Hors ligne