La clase Java FileWriter, java.io.FileWriter
, permite escribir caracteres en un archivo. En ese sentido, el escrito de archivos Java funciona muy parecido al FileOutputStream
, excepto que a FileOutputStream
está basado en bytes, mientras que a FileWriter
está basado en caracteres. El FileWriter
está destinado a 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 escritura de archivos
Aquí hay un ejemplo simple 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 adecuado de excepciones se ha omitido aquí en aras de la claridad. Para obtener más información sobre el manejo correcto de excepciones, vaya a Manejo de excepciones de Java IO.
El FileWriter
también tiene otros constructores, lo que le permite especificar el archivo en el que escribir de diferentes maneras. Mira en el JavaDoc oficial para obtener información más detallada.
Sobrescribir vs Anexar el Archivo
Al crear un Java FileWriter
usted puede decidir si desea sobrescribir cualquier archivo existente con el mismo nombre, o si desea anexar a un archivo existente. Usted decide eso eligiendo qué constructor FileWriter
utiliza.
El constructor FileWriter
que toma solo un parámetro, el nombre del archivo, sobrescribirá 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
Codificación de caracteres para escribir archivos
FileWriter
asume que desea codificar los bytes en el archivo utilizando la codificación de caracteres predeterminada para el equipo en el que se ejecuta la aplicación. Esto puede no ser siempre lo que quieres, ¡y no puedes cambiarlo!
Si desea especificar un esquema de codificación de caracteres diferente, no utilice un FileWriter
. Utilice un OutputStreamWriter
en un FileOutputStream
en su lugar. OutputStreamWriter
le permite especificar el esquema de codificación de caracteres que se utilizará al escribir bytes en el archivo subyacente.
write (int)
El método Java FileWriter
write(int)
escribe los 16 bits inferiores de int
en el destino al que FileWriter
está conectado, como un solo carácter. Aquí hay un ejemplo de escribir un solo carácter en 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 FileWriter
está conectado. El método write(char)
devuelve el número de caracteres realmente escritos en el FileWriter
. Aquí hay un ejemplo de escritura de una matriz de caracteres en un Java FileWriter
:
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 escritor de archivos Java que escribir un carácter a la 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 exacto que obtiene depende del sistema operativo subyacente y del hardware del equipo en el que ejecuta el código Java. El aumento de velocidad depende de problemas como la velocidad de la memoria, la velocidad del disco duro y los tamaños de búfer, etc.
Almacenamiento en búfer transparente a través de BufferedWriter
Puede obtener almacenamiento en búfer transparente de bytes escritos en un Java FileWriter
envolviéndolo en un Java BufferedWriter . Todos los bytes escritos en BufferedWriter
primero se almacenarán en búfer dentro de una matriz de bytes interna en BufferedWriter
. Cuando el búfer está lleno, el búfer se descarga al FileWriter
subyacente a la vez. Aquí hay un ejemplo de envolver un Java FileWriter
en un BufferedWriter
:
int bufferSize = 8 * 1024;Writer writer = new BufferedWriter( new FileWriter("c:\data\output-file.txt"), bufferSize );
Puedes leer más sobre BufferedWriter
en mi tutorial de BufferedWriter.
flush ()
El método Java FileWriter
flush()
vacía todos los datos escritos en el FileWriter
en el archivo subyacente. Los datos pueden almacenarse en búfer en la memoria del sistema operativo en algún lugar, incluso si su código Java los ha escrito en FileWriter
. Llamando a flush()
puede asegurarse de que los datos almacenados en búfer se descargarán (escribirán) en el disco. Aquí hay un ejemplo de descarga de datos escritos en un Java FileWriter
llamando a su método flush()
:
fileWriter.flush();
Cierre de un escritor de archivos
Cuando haya terminado de escribir caracteres en un Java FileWriter
, recuerde cerrarlo. Cerrar un FileWriter
se hace llamando a su método close()
. Así es como se ve cerrar un Java FileWriter
:
fileWriter.close();
También puede usar la construcción probar con recursos introducida en Java 7. Aquí le mostramos cómo usar y cerrar un aspecto FileWriter
con la construcción probar con recursos:
try(FileWriter fileWriter = new FileWriter("data\filewriter.txt") ){ fileWriter.write("data 1"); fileWriter.write("data 2"); fileWriter.write("data 3");}