Java FileWriter

La clase Java FileWriter, java.io.FileWriter, permite escribir caracteres en un archivo. En este sentido, el Java FileWriter funciona de forma muy parecida al FileOutputStream, excepto que un FileOutputStream está basado en bytes, mientras que un FileWriter está basado en caracteres. El FileWriter está pensado para escribir texto, en otras palabras. Un carácter puede corresponder a uno o más bytes, dependiendo del esquema de codificación de caracteres en uso. La clase Java FileWriter es una subclase de la clase Java Writer, por cierto.

Ejemplo de FileWriter

Aquí está un simple ejemplo de Java FileWriter:

Writer fileWriter = new FileWriter("data\filewriter.txt");fileWriter.write("data 1");fileWriter.write("data 2");fileWriter.write("data 3");fileWriter.close();

Nota: El manejo correcto de las excepciones se ha omitido aquí en aras de la claridad. Para aprender más sobre el manejo correcto de excepciones, vaya a Java IO Exception Handling.

El FileWriter tiene otros constructores también, lo que le permite especificar el archivo para escribir en diferentes maneras. Busque en el JavaDoc oficial para obtener información más detallada.

Sobrescribir vs. anexar el archivo

Cuando se crea un Java FileWriter puede decidir si desea sobrescribir cualquier archivo existente con el mismo nombre, o si desea anexar a cualquier archivo existente. Usted decide que la elección de lo que FileWriter constructor que utiliza.

El constructor FileWriter tomar sólo un parámetro, el nombre del archivo, se sobrescribe cualquier archivo existente:

Writer fileWriter = new FileWriter("c:\data\output.txt");

FileWriter tiene un constructor que toma 2 parámetros también: El nombre del archivo y un booleano. El booleano indica si se debe añadir o sobrescribir un archivo existente. Aquí hay dos ejemplos de Java FileWriter que muestran que:

Writer fileWriter = new FileWriter("c:\data\output.txt", true); //appends to fileWriter fileWriter = new FileWriter("c:\data\output.txt", false); //overwrites file

FileWriter Character Encoding

El FileWriter asume que usted quiere codificar los bytes al archivo utilizando la codificación de caracteres por defecto para el equipo de su aplicación se está ejecutando en. Esto puede no ser siempre lo que quieres, y no puedes cambiarlo.

Si quieres especificar un esquema de codificación de caracteres diferente, no uses un FileWriter. Utilice un OutputStreamWriter en un FileOutputStream en su lugar. El OutputStreamWriter le permite especificar el esquema de codificación de caracteres a utilizar al escribir bytes al archivo subyacente.

write(int)

El método Java FileWriter write(int) escribe los 16 bits inferiores del int al destino al que está conectado el FileWriter, como un solo carácter. He aquí un ejemplo de escritura de un solo carácter a un Java FileWriter:

FileWriter fileWriter = new FileWriter("data/output.txt");fileWriter.write('A');

write(char)

El Java FileWriter también tiene un método write(char) que puede escribir una matriz de caracteres al destino al que está conectado el FileWriter. El método write(char) devuelve el número de caracteres realmente escritos en el FileWriter. He aquí un ejemplo de escritura de una matriz de caracteres en un FileWriter de Java:

FileWriter fileWriter = new FileWriter("data/output.txt");char chars = new char{'A','B','C','D','E'};fileWriter.write(chars);

Rendimiento de escritura

Es más rápido escribir una matriz de caracteres en un FileWriter de Java que escribir un carácter cada vez. El aumento de velocidad puede ser bastante significativo – hasta 10 veces mayor o más. Por lo tanto, se recomienda utilizar los métodos write(char) siempre que sea posible.

El aumento de velocidad exacta que se obtiene depende del sistema operativo subyacente y el hardware del equipo que ejecuta el código Java en. El aumento de velocidad depende de cuestiones como la velocidad de la memoria, la velocidad del disco duro y el tamaño de los búferes, etc.

Buffer transparente a través de BufferedWriter

Se puede obtener un buffer transparente de los bytes escritos en un Java FileWriter envolviéndolo en un Java BufferedWriter . Todos los bytes que se escriban en el BufferedWriter se almacenarán primero en una matriz de bytes interna en el BufferedWriter. Cuando el búfer está lleno, el búfer se vacía al FileWriter subyacente de una vez. Aquí hay un ejemplo de envolver un FileWriter de Java en un BufferedWriter:

int bufferSize = 8 * 1024;Writer writer = new BufferedWriter( new FileWriter("c:\data\output-file.txt"), bufferSize );

Puedes leer más sobre el BufferedWriter en mi tutorial de BufferedWriter.

flush()

El método flush() de Java FileWriter vacía todos los datos escritos en el FileWriter al archivo subyacente. Los datos podrían estar almacenados en la memoria del sistema operativo en algún lugar, incluso si su código Java ha escrito en el FileWriter. Llamando a flush() puedes asegurarte de que cualquier dato almacenado en el buffer será vaciado (escrito) en el disco. He aquí un ejemplo de descarga de datos escritos en un FileWriter de Java llamando a su método flush():

fileWriter.flush();

Cerrando un FileWriter

Cuando haya terminado de escribir caracteres en un FileWriter de Java debe recordar cerrarlo. Cerrar un FileWriter se hace llamando a su método close(). Así es como se ve el cierre de un FileWriter de Java:

fileWriter.close();

También puede utilizar la construcción try-with-resources introducida en Java 7. Así es como se ve el uso y cierre de un FileWriter con la construcción try-con-recursos:

try(FileWriter fileWriter = new FileWriter("data\filewriter.txt") ){ fileWriter.write("data 1"); fileWriter.write("data 2"); fileWriter.write("data 3");}

Leave a Reply