¿Cómo escribir archivos en Java? Anteriormente publicamos una muy útil y sencilla guía que explica el proceso de creación de archivos. La guía la puedes encontrar aquí.
Una vez que creamos un archivo, desearemos muchas veces escribir información en él. Por ejemplo, si creamos un archivo para almacenar un log de información podemos escribir todos los cambios que vayan sucediendo en la aplicación. O si desarrollamos una aplicación de chat tal vez desearíamos guardar un historial de las conversaciones. Todo esto se hace posible mediante la escritura de archivos.
Java ofrece una librería exclusiva para este propósito, la librería FileWriter, la cual tiene muchas opciones para el desarrollo de esta clase de códigos. En acompañamiento a ella, para este fin usaremos de igual forma la librería BufferedWriter, esa librería nos ayuda a escribir los archivos mediante la implementación de un Buffer de caracteres, es decir, un lugar en donde se almacenan varios caracteres para facilitar su escritura sin causar conflictos o problemas.
En fin, necesitamos importar ambas librerías, para ello utilizaremos el siguiente código:
Una vez importadas las librerías nos enfocaremos en desarrollar una función o método que reciba como parámetros a la línea que deseamos escribir en el archivo, y el archivo al que deseamos escribir dicha línea. Al haber completado este paso será muy fácil llamarlo desde cualquier parte del programa mediante una única línea.
Ese método será llenado con lo que iremos armando poco a poco. Por fines de eficiencia es una función booleana, es decir que retornará true o false dependiendo de lo que codifiquemos, con ello podemos sacar provecho y mostrar un mensaje de error en caso de que sea false o hacer lo que debamos hacer en caso de ser true.
Las clases que importamos ofrecen utilidades excelentes para nuestro propósito, usando la clase FileWriter declararemos un objeto homónimo direccionando a nuestro archivo, y un escritor de Buffer: BufferedWriter, direccionando a nuestro FileWriter anterior, con lo que el código quedaría de la siguiente forma:
Recuerda: el archivo estará en una dirección absoluta o relativa de acuerdo a como lo configures.
Ahora que tenemos listos esos datos nos olvidaremos del FileWriter escribir_archivo, y daremos uso únicamente al BufferedWriter, el cual se encargará de escribir los datos.
En el siguiente código vamos a utilizar el método write() de esa clase para escribir en el fichero, el cual recibe como parámetro la línea a escribir, la cual a su vez fue enviada al método con el nombre: linea_a_guardar . Posteriormente usaremos el método newLine() para agregar un salto, lo que permitirá que el siguiente texto que escribamos no se pegue al anterior, esta línea es opcional. Muchas veces también se quiere escribir un texto continuo sin saltos.
Al terminar de guardar una línea debemos cerrar la conexión entre el archivo y java, pero para ello debemos primeramente “drenar” el Buffer para que se escriban todos los datos. Posteriormente cerramos el proceso.
Utilizamos un bloque try-catch para capturar excepciones, en caso de encontrar un problema se emitirá un error que significa que el archivo no se escribió, por lo que devolverá el método el valor false, y en caso de que sí se haya escrito todo el método devolverá true. Podemos ver la importancia de la captura y manejo de excepciones en este ejemplo. Una vez que se haya devuelto un valor el programa sabrá que hacer de acuerdo a lo que se le haya indicado.
El código que está arriba es el completo. Recuerda colocarlo en su propia clase o en la que sea más apropiado según el código de tu programa. A continuación mostraremos un ejemplo de como utilizar este código. Para ello lo instanciaremos desde otra clase:
Al final tendremos un archivo Frases.txt con los datos escritos y un Datos.txt con nueva información. Recuerda que este código NO crea un archivo, para saber como realizar ese proceso puedes revisar la anterior guía publicada.
Si tu código no está diseñado con clases o métodos es fácil solo tomar lo básico. Ejemplo del código que no utiliza clases, objetos o funciones:
Una vez que creamos un archivo, desearemos muchas veces escribir información en él. Por ejemplo, si creamos un archivo para almacenar un log de información podemos escribir todos los cambios que vayan sucediendo en la aplicación. O si desarrollamos una aplicación de chat tal vez desearíamos guardar un historial de las conversaciones. Todo esto se hace posible mediante la escritura de archivos.
Java ofrece una librería exclusiva para este propósito, la librería FileWriter, la cual tiene muchas opciones para el desarrollo de esta clase de códigos. En acompañamiento a ella, para este fin usaremos de igual forma la librería BufferedWriter, esa librería nos ayuda a escribir los archivos mediante la implementación de un Buffer de caracteres, es decir, un lugar en donde se almacenan varios caracteres para facilitar su escritura sin causar conflictos o problemas.
En fin, necesitamos importar ambas librerías, para ello utilizaremos el siguiente código:
import java.io.BufferedWriter; import java.io.FileWriter;
Una vez importadas las librerías nos enfocaremos en desarrollar una función o método que reciba como parámetros a la línea que deseamos escribir en el archivo, y el archivo al que deseamos escribir dicha línea. Al haber completado este paso será muy fácil llamarlo desde cualquier parte del programa mediante una única línea.
import java.io.BufferedWriter; import java.io.FileWriter; public class Archivos{ public boolean escribirEnArchivo(String linea_a_guardar, String nombre_archivo) { } }
Ese método será llenado con lo que iremos armando poco a poco. Por fines de eficiencia es una función booleana, es decir que retornará true o false dependiendo de lo que codifiquemos, con ello podemos sacar provecho y mostrar un mensaje de error en caso de que sea false o hacer lo que debamos hacer en caso de ser true.
Las clases que importamos ofrecen utilidades excelentes para nuestro propósito, usando la clase FileWriter declararemos un objeto homónimo direccionando a nuestro archivo, y un escritor de Buffer: BufferedWriter, direccionando a nuestro FileWriter anterior, con lo que el código quedaría de la siguiente forma:
import java.io.BufferedWriter; import java.io.FileWriter; public class Archivos{ public boolean escribirEnArchivo(String linea_a_guardar, String nombre_archivo) { FileWriter escribir_archivo = new FileWriter(nombre_archivo); BufferedWriter escribir_buffer = new BufferedWriter(escribir_archivo); } }
Recuerda: el archivo estará en una dirección absoluta o relativa de acuerdo a como lo configures.
Ahora que tenemos listos esos datos nos olvidaremos del FileWriter escribir_archivo, y daremos uso únicamente al BufferedWriter, el cual se encargará de escribir los datos.
En el siguiente código vamos a utilizar el método write() de esa clase para escribir en el fichero, el cual recibe como parámetro la línea a escribir, la cual a su vez fue enviada al método con el nombre: linea_a_guardar . Posteriormente usaremos el método newLine() para agregar un salto, lo que permitirá que el siguiente texto que escribamos no se pegue al anterior, esta línea es opcional. Muchas veces también se quiere escribir un texto continuo sin saltos.
Al terminar de guardar una línea debemos cerrar la conexión entre el archivo y java, pero para ello debemos primeramente “drenar” el Buffer para que se escriban todos los datos. Posteriormente cerramos el proceso.
Utilizamos un bloque try-catch para capturar excepciones, en caso de encontrar un problema se emitirá un error que significa que el archivo no se escribió, por lo que devolverá el método el valor false, y en caso de que sí se haya escrito todo el método devolverá true. Podemos ver la importancia de la captura y manejo de excepciones en este ejemplo. Una vez que se haya devuelto un valor el programa sabrá que hacer de acuerdo a lo que se le haya indicado.
/*Clase que escribe nueva información en los archivos *Por: Daniel Ortiz Costa */ import java.io.BufferedWriter; import java.io.FileWriter; public class Archivos{ public boolean escribirEnArchivo(String linea_a_guardar, String nombre_archivo) { BufferedWriter escribir_buffer = new BufferedWriter(escribir_archivo); FileWriter escribir_archivo = new FileWriter(nombre_archivo); try { escribir_buffer.write(linea_a_guardar); escribir_buffer.newLine(); escribir_buffer.flush(); escribir_buffer.close(); } catch (Exception e) { System.out.println(e); return false; } return true; } }
El código que está arriba es el completo. Recuerda colocarlo en su propia clase o en la que sea más apropiado según el código de tu programa. A continuación mostraremos un ejemplo de como utilizar este código. Para ello lo instanciaremos desde otra clase:
public class Test{ public static void main (String [] args){ Archivos archivos = new Archivos(); archivos.escribirEnArchivo ("Juanito es un hombre", "Frases.txt"); archivos.escribirEnArchivo ("Me llamo David", "Frases.txt"); archivos.escribirEnArchivo ("Mi casa es fea", "Datos.txt"); } }
Al final tendremos un archivo Frases.txt con los datos escritos y un Datos.txt con nueva información. Recuerda que este código NO crea un archivo, para saber como realizar ese proceso puedes revisar la anterior guía publicada.
Si tu código no está diseñado con clases o métodos es fácil solo tomar lo básico. Ejemplo del código que no utiliza clases, objetos o funciones:
public class Test{ public static void main (String [] args){ BufferedWriter escribir_buffer = new BufferedWriter(escribir_archivo); FileWriter escribir_archivo = new FileWriter(nombre_archivo); String linea_a_guardar = "Lo que deseas guardar"; try { escribir_buffer.write(linea_a_guardar); escribir_buffer.newLine(); escribir_buffer.flush(); escribir_buffer.close(); } catch (Exception e) { System.out.println(e); } } }