Random Access File petit probleme

Random Access File petit probleme - Java - Programmation

Marsh Posté le 05-03-2011 à 12:48:49    

Bonjour a tous , je débute en java et je doit faire un programme pour lundi , j'ai plus ou moins réussi jusqu'ici , mais j'ai un problème...
 
En gros j'utilise RandomAccessFile pour réécrire par dessus deux lignes :
 
code d'ecriture:
 
                    RandomAccessFile fichier = new RandomAccessFile("fichier.txt", "rw" );
                    String ligne = fichier.readLine();
 
                    for (int i = 1; i < k ; i++) {
                        ligne = fichier.readLine();
                    }
 
                    fichier.writeBytes(LigneBonne + Integer.toString(BonnesReponses) + ";\r\n" );
                    fichier.writeBytes(LigneMauvaise + Integer.toString(MauvaisesReponses) + ";\r\n" );
 
                    fichier.close();

 
où "k" est le nombre de lignes a sauter pour etre bien placé ,
LigneBonne et LigneMauvaise contiennent respectivement les lignes "bonnes reponses : " et "mauvaise reponses : " ,
 
Resultat:
 
avant de mettre les notes:
 
----Fichier-de-notes-----
fruit dealer
bonnes reponses :
mauvaise reponses :
cella werra
bonnes reponses :  
mauvaise reponses :  
 
et après :  
 
----Fichier-de-notes-----
fruit dealer
bonnes reponses :1;2;
mauvaise reponses :1;0;
rra
bonnes reponses :  
mauvaise reponses :  
 
Je ne comprend absolument pas pourquoi le programme supprime progressivement la ligne d'en dessous..
 
évidemment c'est très problématique , des idées ?

Reply

Marsh Posté le 05-03-2011 à 12:48:49   

Reply

Marsh Posté le 05-03-2011 à 20:45:18    

C'est juste que tu n'as pas lu (ou compris) la doc.
 
http://download.oracle.com/javase/ [...] sFile.html
 
"output operations write bytes starting at the file pointer and advance the file pointer past the bytes written."
Ca dit bien "write bytes" et non "insert bytes". En gros, chaque byte que tu écris écrase le byte déjà existant.
 
Donc au départ tu as
bonnes reponses :\r\nmauvaise reponses :\r\ncella werra  
Et à la fin tu as:
bonnes reponses :1;2;\r\nmauvaise reponses :1;2;\r\nrra  
 
Solution: n'utilises pas RandomAccessFile.
Options classiques: tu utilises FileReader/BufferedReader/FileWriter/BufferedWriter pour lire/écrire tes fichiers:
- soit tu le fais en parralèle: le reader sur ton fichier original, le writer sur un fichier temporaire, et une fois terminé, tu remplaces l'original par le temporaire
- soit tu lis tout le fichier original en mémoire, fermes le reader, colles le writer sur l'original en mode écrasement et envoies la sauce.
 
Hope it helps.


---------------
C'était vraiment très intéressant.
Reply

Marsh Posté le 05-03-2011 à 21:48:42    

J'ai compris  , merci infiniment :jap:


---------------
[Awesome !]
Reply

Sujets relatifs:

Leave a Replay

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