enrasar en java.io.FileWriter

Tengo una pregunta en mi mente que, mientras escribo en el archivo, antes de que se cierre, ¿deberíamos incluir flush () ??. Si es así, ¿qué hará exactamente? no transmite el flujo automático? EDITAR:

¿Así que aclara lo que realmente hace?

Los escritores y las secuencias generalmente almacenan algunos de sus datos de salida en memoria e intentan escribirlos en bloques más grandes a la vez. El enjuague provocará una escritura inmediata en el disco desde el búfer, por lo que si el progtwig falla, los datos no se perderán. Por supuesto, no hay garantía, ya que el disco puede no escribir físicamente los datos de inmediato, por lo que aún podría perderse. Pero entonces no sería culpa del progtwig Java 🙂

PrintWriters auto-flush (de forma predeterminada) cuando se escribe un final de línea y, por supuesto, las streams y los buffers se tiñen cuando los cierras. Aparte de eso, hay enrojecimiento solo cuando el buffer está lleno.

Recomiendo encarecidamente llamar a color antes de cerrar. Básicamente, escribe los datos restantes almacenados en el archivo.

Si llama al flush explícitamente, puede estar seguro de que cualquier IOException que se close de manera close es realmente catastrófica y está relacionada con la liberación de recursos del sistema.

Cuando se flush , puede manejar su IOException de la misma manera que maneja las excepciones de escritura de datos.

No necesita hacer un color porque close () lo hará por usted.

Desde el javadoc:

“Cerrar la secuencia, purgándola primero. Una vez que se ha cerrado una secuencia, más invocaciones write () o flush () provocarán una excepción IOException. Sin embargo, cerrar una secuencia previamente cerrada no tiene ningún efecto”.

Para responder a su pregunta sobre qué es lo que realmente hace, en realidad se asegura de que todo lo que haya escrito en la transmisión, un archivo en su caso, realmente se escriba en el archivo en ese momento.

Java puede realizar el almacenamiento en búfer, lo que significa que se mantendrá en los datos escritos en la memoria hasta que tenga una cierta cantidad, y luego escribirlo todo en el archivo de una vez, que es más eficiente. La desventaja de esto es que el archivo no está necesariamente actualizado en un momento dado. La descarga es una forma de decir “actualizar el archivo”.

Las llamadas cerradas se enjuagan primero para garantizar que después de cerrar el archivo tenga lo que esperaría ver en él, por lo tanto, como otros han señalado, no es necesario enjuagar antes del cierre.

Cerrar se vacía automáticamente. No necesita llamarlo.

No tiene sentido llamar a flush () justo antes de cerrar (), como han dicho otros. El momento de usar flush () es si mantiene el archivo abierto pero quiere asegurarse de que las escrituras anteriores se hayan completado por completo.

Como se dijo, generalmente no necesita enjuagar.

Solo tiene sentido si, por algún motivo, desea que otro proceso vea el contenido completo de un archivo con el que está trabajando, sin cerrarlo. Por ejemplo, podría usarse para un archivo que es modificado simultáneamente por múltiples procesos, aunque con MUCHO cuidado 🙂

FileWriter es una clase malvada ya que recoge cualquier juego de caracteres que esté allí, en lugar de tomar un juego de caracteres explícito. Incluso si desea el valor predeterminado, explíquelo.

La solución habitual es OutputStreamWriter y FileOutputStream . Es posible que el decorador arroje una excepción. Por lo tanto, debe poder cerrar la secuencia incluso si el escritor nunca se construyó. Si va a hacer eso, solo necesita enjuagar al escritor (en el caso feliz) y cerrar siempre la transmisión. (Para ser confuso, algunos decoradores, por ejemplo para manejar cremalleras, tienen recursos que sí requieren cierre).

Otro caso de uso para el lavado en el progtwig es escribir el progreso del trabajo de larga duración en un archivo (por lo que puede detenerse y reiniciarse más tarde. Desea asegurarse de que los datos estén seguros en el disco).

 while (true) { computeStuff(); progresss += 1; out.write(String.format("%d", progress)); out.flush(); } out.close(); 
    Intereting Posts