Pregunta

Estoy usando BufferedReader y PrintWriter para recorrer cada línea de un archivo de entrada, hacer un cambio en algunas líneas y generar el resultado. Si una línea no sufre un cambio, solo se imprime como está en el archivo de salida. Sin embargo, por alguna razón, el proceso finaliza prematuramente. El código se ve algo como esto:

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();
}

Sin embargo, por alguna extraña razón, este proceso termina prematuramente (en realidad imprime la mitad de una línea) hacia el final de mi archivo de entrada. ¿Alguna razón obvia para esto? El ciclo while claramente está siendo terminado por un nulo. Y es hacia el final de mi archivo de texto de 250k + line. Gracias!

¿Fue útil?

Solución

¿Dónde se vacía / cierra su PrintWriter o FileOutputStream? Si el programa sale y esto no se hace, no se escribirán todos los resultados.

Necesita out.close () (posiblemente un p.flush () también?) al final de su proceso para cerrar la secuencia de salida del archivo

Otros consejos

Intente agregar un p.flush () después del bucle.

PrintWriter no tiene habilitado el autoflushing, por lo que es probable que el último bit del archivo no se vacíe antes de que finalice el programa.

Añadiendo un p.flush () después de que tu bucle while debería hacer el truco.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top