Des problèmes avec BufferedReader / PrintWriter?
-
05-07-2019 - |
Question
J'utilise BufferedReader et PrintWriter pour parcourir chaque ligne d'un fichier d'entrée, modifier certaines lignes et afficher le résultat. Si une ligne ne subit aucune modification, elle est simplement imprimée telle quelle dans le fichier de sortie. Cependant, pour une raison quelconque, le processus se termine prématurément. Le code ressemble à ceci:
BufferedReader in = new BufferedReader(new FileReader("in.txt"));
FileOutputStream out = new FileOutputStream("out.txt");
PrintWriter p = new PrintWriter(out);
String line = in.readLine();
while(line!=null)
{
if(line is special)
do edits and p.println(edited_line);
else
p.println(line);
line = in.readLine();
}
Cependant, pour une raison quelconque, ce processus se termine prématurément (en fait, il affiche une demi-ligne) vers la toute fin de mon fichier d'entrée. Une raison évidente à cela? La boucle while est clairement terminée par un null. Et c'est vers la fin de mon fichier txt 250k + line. Merci!
La solution
Où videz-vous / fermez-vous PrintWriter ou FileOutputStream? Si le programme se termine et que cela n’est pas fait, tous vos résultats ne seront pas écrits.
Vous avez besoin de out.close ()
(éventuellement un p.flush ()
?) à la fin de votre processus pour fermer le flux de sortie du fichier
Autres conseils
Essayez d’ajouter un p.flush () après la boucle.
Le vidage automatique de PrintWriter n'est pas activé, il est donc probable que le dernier bit du fichier ne soit pas vidé avant la fin du programme.
Ajouter un
p.flush ()
après votre boucle while devrait faire l'affaire.