#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
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 , merci
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