Réinitialisation d'un fichier quelconque

spidermax55 Messages postés 8 Date d'inscription mercredi 23 juillet 2003 Statut Membre Dernière intervention 28 juillet 2003 - 23 juil. 2003 à 16:49
CoreBreaker Messages postés 540 Date d'inscription dimanche 23 mars 2003 Statut Membre Dernière intervention 5 octobre 2007 - 25 juil. 2003 à 19:36
Spidermax eh eh... :-p

Voilà en gros mon problème: je dois ajouter des éléments d'une liste dans un fichier, cette liste est constituée en fait d'objets du type Vector. Le prob, c'est que je n'arrive à ajouter qu'un seul élément à la fois, puisque si j'en ajoute 2, par exemple, le dernier est la copie conforme du premier. Au début, je ne m'en rend pas compte, puisque j'utilise une JList qui me met bien mes éléments en place. Mais quand je quitte mon programme et que je le relance, je me retrouve avec 2 copies de mes éléments :( Au début du prog, je lis bien mon fichier et à la fin, je l'écrit de la même façon, avec un ObjectOutputStream(new FileOutputStream("max.pla")). Auriez vous un truc pour réinitialiser mon fichier à chaque fois que je veux ajouter un élément dans la liste ??? Et c'est la même chose si je veux modifier une partie d'un élément de la liste (j'ai 3 parties distinctes dans mon élément). pcq je me suis rendu compte qu'il ne se réinitialisait qu'à partir du moment où je quittais le programme. PLEASE HELP ME !!!!Merci de votre aide...
:big) >

6 réponses

CoreBreaker Messages postés 540 Date d'inscription dimanche 23 mars 2003 Statut Membre Dernière intervention 5 octobre 2007 1
24 juil. 2003 à 03:23
J'ai pas vraiment compris le concept de réinitialisation d'un fichier, mais si c'est bien l'écraser avec une taille initiale de zéro, sache qu'en principe si tu fais new FileOutputStream(...), le fichier est "re-créé".

Tu peux le testé ainsi:
FileOutputStream f= new FileOutputStream("f");
f.write('a');
f.write('b');
f.close();
f= FileOutputStream("f");
f.write('c');
f.close();

Tu verras que le fichier ne contient que 'c'.

Donc si tu fais:
Vector v= new Vector();
v.add(new Integer(1);
ObjectOutputStream s= new ObjectOutputStream(new FileOutputStream("f"));
s.writeObject(v);
s.close();


Puis:
ObjectInputStream s2= new ObjectInputStream(new FileInputStream("f"));
Vector v2= (Vector)s2.readObject();
s2.close();
v2.add(new Integer(2);
v2.add(new Integer(3);
s= new ObjectOutputStream(new FileOutputStream("f"));
s.writeObject(v);
s.close();


Tu veras qu'en faisant:
s2= new ObjectInputStream(new FileInputStream("f"));
v2= (Vector)s2.readObject();
s2.close();

v2 contiendra les 3 instances d'Integer

Core Breaker :)
0
spidermax55 Messages postés 8 Date d'inscription mercredi 23 juillet 2003 Statut Membre Dernière intervention 28 juillet 2003
24 juil. 2003 à 10:45
Spidermax eh eh... :-p

Je suis tout à fait d'accord avec ton code, c'est d'ailleurs ce que j'avais déjà fait. Dans mon Vector, je lui passe aussi en paramètre un objet Compte qui contient un nom, un code et un chiffre associé.je veux donc ajouter un élément, pas de prob ! mais si je rajoute un autre élément, sans quitter le programme, cet élément se transforme en une copie de l'ancien élément, d'où mon problème... Peut être mon prob est situé dans ma méthode de Vector, j'utilise addElement(Object o), et cet objet est une Hashtable, c'est un peu spécial mais bon, c'est très utile ! juge un peu si on veut relire mon vecteur:

ObjectInputStream in = new ObjectInputStream(new FileInputStream("test.pop"));
            v=(Vector)in.readObject();
            in.close();
int i=0;
for (Enumeration enum = v.elements(); enum.hasMoreElements();) { 
               
               h = (Hashtable)enum.nextElement();
               c = (Compte2) h.get(new Integer(i+1));
                c.affiche();
}


Compte2 est mon objet de type Compte(String, String,double).
Cette méthode marche bien, sauf si j'ai rentré plus d'un élément à la fois!!!
la méthode affiche() m'affiche l'élément de la liste dans Compte2 (avec le new Integer(i+1))
Merci bcp si tu peux m'aider !!!
0
CoreBreaker Messages postés 540 Date d'inscription dimanche 23 mars 2003 Statut Membre Dernière intervention 5 octobre 2007 1
24 juil. 2003 à 21:00
Pass moi les fichiers des classes Cmpte, Compte2, et celle qui implements l'utilisation de ObjectInputStrem et ObjectOutputStream à metaos@free.fr ainsi je pourrais débugger plus facilement.

Plutôt que d'utiliser une Hashtable avec un integer comme clé je te conseille d'utiliser un Vector c'est plus adapté (plus rapide, utilise moins de mémoire)

Core Breaker :)
0
spidermax55 Messages postés 8 Date d'inscription mercredi 23 juillet 2003 Statut Membre Dernière intervention 28 juillet 2003
25 juil. 2003 à 09:01
Spidermax eh eh... :-p

Ok, je vais essayer de te passer tout mon prog en zip, mais c'est une application graphique pour un futur usage industriel (donc chut...), tu verras, y a déjà l'icone du groupe. Le prog principal à lancer est TexteCadre. Si tu peux me débugger ce truc, ça serait sympa. merci de ton aide.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
spidermax55 Messages postés 8 Date d'inscription mercredi 23 juillet 2003 Statut Membre Dernière intervention 28 juillet 2003
25 juil. 2003 à 09:04
Spidermax eh eh... :-p
0
CoreBreaker Messages postés 540 Date d'inscription dimanche 23 mars 2003 Statut Membre Dernière intervention 5 octobre 2007 1
25 juil. 2003 à 19:36
Ok merci, je l'ai bien recu. Je vais pouvoir résoudre ton problème.

T'inqiète pour la confidentialité une fois que tu m'auras confirmé que ma solution à bien résolu ton problème je détruirais tout chez moi pour ne laisser aucune trace (j'en ai l'habitude avec d'autres développeurs). Car j'ai pas envie moi même d'être accusé d'espionnage industriel ! Si un jour on fouille mon disque.

Et pour plus de sécurité je t'enverrai la solution par mail pour que le code ne soit pas publié ici.

Core Breaker :)
0
Rejoignez-nous