Chargement d'un fichier de sauvegarde

Chargement d'un fichier de sauvegarde - Java - Programmation

Marsh Posté le 10-06-2006 à 19:06:32    

Bonjour,
j'ai un programme où je stock des données d'individu (homme,age,etc),que je sauvegarde de cette manière:
       try
         {
            BufferedOutputStream bos = new BufferedOutputStream ( new FileOutputStream ("Essai.dat" ));
            ObjectOutputStream oos = new ObjectOutputStream (bos);
            oos.writeObject(stock);
         }
        catch ( java.io.FileNotFoundException fnfe)  
        {  
        }  
        catch ( IOException e)  
        {  
        }  
 
le fichier sauvegardé s'appelle donc Essai.dat, mais lorsque je relance le programme,j'aimerais qu'il se charge et que les données soit chargées également.
Savez vous quelle instruction ou commen je dois faire pour cela SVP ?
d'avance merci et a bientot  :hello:

Reply

Marsh Posté le 10-06-2006 à 19:06:32   

Reply

Marsh Posté le 10-06-2006 à 19:54:25    

en fait tu veux rechopper les données que tu as mis dans ton fichier ?
 
Bah faut lire le fichier !
Ou alors j'ai pas compris :??:

Reply

Marsh Posté le 11-06-2006 à 00:45:18    

J'ai compris la même chose : relecture du fichier.
 
Suffit d'utiliser le pendant des mêmes classes (ObjectInputStream, etc.) en oubliant pas de caster le retour de "readObject()" avec la classe stockée dans ton fichier .dat


---------------
TReVoR - http://dev.arqendra.net - http://info.arqendra.net
Reply

Marsh Posté le 11-06-2006 à 00:45:43    

ouai voila,bah fo faire comment pour charger/lire un fichier au démarage du programme en fait ? :)

Reply

Marsh Posté le 11-06-2006 à 00:51:54    

Mêmes principes que pour l'écriture, mais avec le pendant des classes en xxxInputxxx. Fais des tests, et cherche un peu ;)
 
Nb: je vois pas trop l'intérêt d'utiliser un BufferedxxxStream, vu que tu écris ou lis 1 seul objet (à moins que les pontes de Java me disent le contraire).
 
Nb2: fermer les flux pourrait être une bonne idée aussi (+ propre!!)


Message édité par trevor le 11-06-2006 à 00:53:03

---------------
TReVoR - http://dev.arqendra.net - http://info.arqendra.net
Reply

Marsh Posté le 11-06-2006 à 15:43:15    

désole jsui un peu nul en java,j'ai pas tres bien compris on explication

Reply

Marsh Posté le 11-06-2006 à 17:35:40    

voila j'ai rajouter ca sur un boutton "charger" pour charger le fichier Essai.dat et ses données, mais ca fai rien:
 
        try
        {
        BufferedInputStream bis = new BufferedInputStream (new FileInputStream ("Essai.dat" ));
        ObjectInputStream ois = new ObjectInputStream (bis);
        this.stock = (Vector<Individu> )ois.readObject();
         }
 
        catch ( java.io.FileNotFoundException fnfe)  
        {  
        }  
        catch ( IOException e)  
        {  
        }
        catch (ClassNotFoundException cnf)
        {
        }

Reply

Marsh Posté le 11-06-2006 à 18:41:50    

Ca me semble +ou- correct pourtant. As-tu vérifié ce que tu avais dans ton objet "this.stock" ?
 
Sinon, les try/catch ça serait bien de les coder proprement, et d'ailleurs ça te mettrai peut-être sur la voie, notamment en mettant au poins un System.out.println(message) qui te permettrait de savoir si l'une des exceptions a été déclenchée...
 
Bis repetitae: la question de la fermeture des flux après leur utilisation reste d'actualité.

Reply

Marsh Posté le 11-06-2006 à 22:57:31    

merci pour ta réponse,maintenant j'ai ça:
 
        try
        {
        BufferedInputStream bis = new BufferedInputStream (new FileInputStream ("Essai.dat" ));
        ObjectInputStream ois = new ObjectInputStream (bis);
        this.stock = (Vector<Individu> )ois.readObject();
         }
 
        catch ( IOException e)  
        {  
            System.out.println("IOException marche!" );  
            System.out.println(this.stock);  
        }
        catch (ClassNotFoundException cnf)
        {
            System.out.println("ClassNotFoundException marche!" );  
        }
 
Ile m'affiche que seule l'exception IOException a été déclenchée,pas l'autre.
Sinon dans le this.stock,quand je relance le programme,il me marque qu'il y a rien dedans,c'est normal car il charge aucune donnée du fichier...

Reply

Marsh Posté le 11-06-2006 à 23:09:55    

DrOctopus a écrit :


     
            System.out.println("IOException marche!" );  
         
            System.out.println("ClassNotFoundException marche!" );  
         
 


[:pingouino] Original le message d'erreur.
Sinon affiche la trace de ton exception (nomDeLException.printstacktrace()), ca te dira plus ou moins ou ca a merde  


---------------
Mon feedback
Reply

Marsh Posté le 11-06-2006 à 23:09:55   

Reply

Marsh Posté le 11-06-2006 à 23:31:41    

DrOctopus a écrit :

merci pour ta réponse,maintenant j'ai ça:
Ile m'affiche que seule l'exception IOException a été déclenchée,pas l'autre.
Sinon dans le this.stock,quand je relance le programme,il me marque qu'il y a rien dedans,c'est normal car il charge aucune donnée du fichier...


Tu ferais bien de googliser un petit peu pour savoir à quoi sert une exception... En l'occurrence, il est normal d'en avoir qu'une seule d'exception (enfin une à la fois dirons-nous), et ça serait même encore mieux si aucune n'était déclenchée.
 
Donc direction --> les exceptions, et quoi-t'est-ce que les IOException et les ClassNotFoundException et pourquoi tu utilises celles-là dans ce bout de code.
 
Sinon, je persiste :
- FERME tes PU*%$s de flux après utilisation
- vire le chainage de flux en Buffered, ça sert à rien, et ça rajoute une couche d'erreurs possibles


---------------
TReVoR - http://dev.arqendra.net - http://info.arqendra.net
Reply

Marsh Posté le 11-06-2006 à 23:37:02    

Ce serait ptet une bonne idée de repartir de 0 et d'essayer de remonter ça proprement en comprenant comment fonctionne la sérialization non?
 
Parce que chez moi un truc comme ça

Code :
  1. import java.io.ObjectOutputStream;
  2. import java.io.ObjectInputStream;
  3. import java.io.FileInputStream;
  4. import java.io.FileOutputStream;
  5. import java.util.ArrayList;
  6. import java.io.IOException;
  7. import java.io.FileNotFoundException;
  8. import java.lang.ClassNotFoundException;
  9. import java.util.Arrays;
  10. import java.util.Collection;
  11.  
  12. class TestSerialize2 {
  13.    public static void main(String[] args) {
  14.        String[] data = {"foo","bar","baz","buzz","bizz"};
  15.        ArrayList<String> appdata = new ArrayList<String>(Arrays.asList(data));
  16.        try {
  17.            ObjectInputStream ins = new ObjectInputStream(new FileInputStream("foo.dat" ));
  18.            ArrayList<String> indata = (ArrayList<String> )ins.readObject();
  19.            indata.close();
  20.            for(int i=0; i<indata.size(); ++i) {
  21.                assert indata.get(i).equals(appdata.get(i));
  22.                System.out.print(indata.get(i)+" " );
  23.            }
  24.            System.out.println("\n" );
  25.        } catch(ClassCastException e) {
  26.            e.printStackTrace();
  27.        } catch(ClassNotFoundException e) {
  28.            e.printStackTrace();
  29.        } catch(FileNotFoundException e) {
  30.            e.printStackTrace();
  31.        } catch(IOException e) {
  32.            e.printStackTrace();
  33.        }
  34.        try {
  35.            ObjectOutputStream outs = new ObjectOutputStream(new FileOutputStream("foo.dat" ));
  36.            outs.writeObject(appdata);
  37.            outs.close();
  38.            System.out.println("Application data:" );
  39.            for(String d: appdata) {
  40.                System.out.print(d+" " );
  41.            }
  42.        } catch(FileNotFoundException e) {
  43.            e.printStackTrace();
  44.        } catch(IOException e) {
  45.            e.printStackTrace();
  46.        }
  47.    }
  48. }


fonctionne très bien.
(à un warning près quand on compile en -Xlint, mais impossible de l'éviter)
 
Sinon, comme les autres l'ont dit:

  • Ferme tes flux [:mlc]
  • C'est quoi l'intérêt d'un BufferedReader [:petrus dei]
  • Comprends tu comment fonctionnent les exceptions?
  • Comprends tu pourquoi et en quoi ton code risque de balancer des IOException ou des ClassNotFoundException? Non parce que si tu mets juste les catch pour faire taire le compilateur ça va pas  trop marcher [:pingouino]


Message édité par masklinn le 11-06-2006 à 23:41:02

---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 11-06-2006 à 23:51:51    

l'interet du buffer, c'est si son object est possiblement gros; mais vu qu'il ferme pas son flux et que son object est petit, ben son fichier est vide [:dawa]


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
Reply

Marsh Posté le 11-06-2006 à 23:56:15    

the real moins moins a écrit :

l'interet du buffer, c'est si son object est possiblement gros


Je parlais bien sûr de l'intérêt dans son cas de sérialization :jap:  
 
Et il les faut franchement gros les objets pour que ça ait un intérêt, un Array de 100 Integer (pas int) c'est sérialisé en 1ko [:pingouino]
 
Et ce serait pas plutôt pour un grand nombre de petits objets que ce serait intéressant?
 
J'veux dire si on colle un gros objet sérializé en 2Mo ([:pingouino]) on s'en fout qu'il soit envoyé directement dans le fichier et pas bufferé, par contre si on sérialize 200.000 objets de 1ko chacun ça peut être intéressant de sérializer pour ne faire qu'une dizaine ou une centaine d'écritures dans le fichier au lieu de 200.000.
 
Ou alors je me plante sur le principe derrière l'output buffering [:petrus dei]

Message cité 1 fois
Message édité par masklinn le 11-06-2006 à 23:59:20

---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 12-06-2006 à 00:11:20    

ha, ché pas, mais en tous cas, là, vu qu'il ferme pas son flux, c'est clair qu'il écrit rien :D


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
Reply

Marsh Posté le 12-06-2006 à 01:05:48    

masklinn a écrit :

par contre si on sérialize 200.000 objets de 1ko chacun ça peut être intéressant de sérializer pour ne faire qu'une dizaine ou une centaine d'écritures dans le fichier au lieu de 200.000.


Moi aussi c'est comme ça que j'avais compris l'intérêt de la bufferisation, en tout cas.


---------------
TReVoR - http://dev.arqendra.net - http://info.arqendra.net
Reply

Marsh Posté le 12-06-2006 à 11:55:32    

merci pour tous vos message !
Bah je vous explique ,je fai un projet de Java ,et la serialisation je ne l'ai pas encore vu,alors je suis un peu perdu dans ce domaine.Je ne fais que des copier coller avec ce que me conseil mon prof de java,donc peut etre que c'est une buse en effet :-D
 
Par contre je comprend pas tres bien l'histoire du flux, ca se ferme comment ??
desolé encore pour ces questions qui vous paraissent débiles,a bientot j'éspere...  

Reply

Marsh Posté le 12-06-2006 à 16:38:53    

DrOctopus a écrit :

merci pour tous vos message !
Bah je vous explique ,je fai un projet de Java ,et la serialisation je ne l'ai pas encore vu,alors je suis un peu perdu dans ce domaine.Je ne fais que des copier coller avec ce que me conseil mon prof de java,donc peut etre que c'est une buse en effet :-D
 
Par contre je comprend pas tres bien l'histoire du flux, ca se ferme comment ??
desolé encore pour ces questions qui vous paraissent débiles,a bientot j'éspere...


 
sans vouloir t'offenser, c'est peut etre pas la seule buse dans l'histoire [:dawa]
Ne te contente pas de recopier ce qu'il dit !  
demande des explications, cherche sur le net le pourquoi du comment :)

Reply

Marsh Posté le 13-06-2006 à 10:39:23    

lol je sais bien que c'est moi la buse :)
mais bon je comprend pas trop ce que je fais, enfin un peu quand meme lol,ca serait simpa de m'expliquer clairement le probleme,et de me proposer des solutions... :(
S'il vous plait help me sinon je suis dead

Reply

Marsh Posté le 15-06-2006 à 00:01:11    

DrOctopus a écrit :

Par contre je comprend pas tres bien l'histoire du flux, ca se ferme comment ??


Comment on dit "fermer" en anglais ?


---------------
TReVoR - http://dev.arqendra.net - http://info.arqendra.net
Reply

Sujets relatifs:

Leave a Replay

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