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