Chargement d'un fichier de sauvegarde - Java - Programmation
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
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
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 ?
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!!)
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
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)
{
}
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é.
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...
Marsh Posté le 11-06-2006 à 23:09:55
DrOctopus a écrit : |
Original le message d'erreur.
Sinon affiche la trace de ton exception (nomDeLException.printstacktrace()), ca te dira plus ou moins ou ca a merde
Marsh Posté le 11-06-2006 à 23:31:41
DrOctopus a écrit : merci pour ta réponse,maintenant j'ai ça: |
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
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 :
|
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:
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
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
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
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 () 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
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
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.
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...
Marsh Posté le 12-06-2006 à 16:38:53
DrOctopus a écrit : merci pour tous vos message ! |
sans vouloir t'offenser, c'est peut etre pas la seule buse dans l'histoire
Ne te contente pas de recopier ce qu'il dit !
demande des explications, cherche sur le net le pourquoi du comment
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
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 ?
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