Clases FileReader y FileWriter para ficheros de texto en Java

Hola a todos, hoy os explicare como podemos manejar las clases FileReader y FileWritter para ficheros de texto en Java.

Las clases FileReader y FileWriter permiten leer y escribir, respectivamente, en un fichero.

Lo primero que debemos hacer es importar estas clases y las que controlan las excepciones.

Después debemos crear un objeto de alguna de estas clases. Se pueden construir con un objeto File, FileDescriptor o un String. Nosotros usaremos este último.

Al crear un objeto de estas clases, deben estar dentro de un try-catch.

Recuerda que debemos controlar las excepciones.

Cuando creamos un objeto, abrimos un stream entre nuestro programa y el exterior, cuando debemos de usarlo debemos cerrar el stream con el método close().

Veamos un ejemplo, de creación de los objetos, también cerramos los streams:

Como vemos, escribimos la ruta del fichero. Si usas FileWriter y escribes una ruta de fichero que no existe lo crea, para FileReader si que debe existir el fichero, sino lanzara una excepción. Usamos doble barra (\\) por que es un carácter de escape, para poner \.

Ahora vamos a ver como escribir y leer texto en el fichero.

Para escribir, usaremos el método write de FileWriter, este método puede usar como parámetro un String con lo que queremos escribir o un número que se corresponderá un carácter de la tabla ASCII.

Para leer, usaremos el método read de FileReader, este método no tiene parámetros pero devuelve un número que si le hacemos un casting a char este sera legible por nosotros. Esto lo podemos mostrar por pantalla o incluso pasarlo a otro fichero (crear otro objeto). Cuando se termina el fichero, el método read devuelve -1.

Veamos un ejemplo, primero escribiremos en el fichero y luego lo leemos:

La idea es abrir un fichero, escribir o leer y cerrar el fichero. No es necesario que hagamos nada para mover el puntero del fichero, cuando leemos un carácter automáticamente el puntero se mueve.

¿Que pasa si escribiera el siguiente código?

Si ejecutamos el código, no escribirá nada en pantalla pero si escribirá en el fichero, la pregunta es ¿Porque? La respuesta es que  cuando se cierra el stream, es como si pincháramos en guardar de forma gráfica, es decir, que si no cerramos el stream es como si el fichero estuviera vacio. También debemos tener en cuenta que esto se debe a que leemos y modificamos el mismo fichero en el mismo tiempo.

¿Entonces que podemos hacer? Podemos hacer como lo hemos visto antes o podemos usar el método flush() de FileWriter que hace que se guarden los cambios. Veamos como queda:

Desde java 7 tenemos una mejor forma de abrir y cerrar stream, ahorrándonos trabajo.

Veamos como seria:

Como vemos, en el try creamos los objetos que queremos manejar, separados con un ; por objeto, con esta forma los streams se cierran automáticamente.

Por último, si queremos añadir mas texto a un fichero de texto que ya tenga contenido, al construir el objeto de la clase FileWriter añadimos como segundo parámetro un true. Si no lo hacemos, sobrescribiremos el fichero entero al escribir algo nuevo.

Ahora veremos el mismo ejemplo anterior pero usando métodos.

Espero que os sea de ayuda. Si tenéis dudas, preguntad. Estamos para ayudarte.

Compartir

10 comentarios

  1. Antonio

    Pero lo mejor no es utilizar el objeto BufferedReader y BufferedWritter para leer y escribir?

  2. Disco Duro de Roer Post author

    Hola Antonio, si es mejor usar Buffered,tengo el manual preparado, pero también puede haber personas que no conozcan estas clases que si son necesarias para los Buffered. Gracias por tu comentario.

  3. Mary

    Hola =).
    Disculpa hay otra manera de poner la ruta del archivo?? porque lo pongo tal y como lo veo en tu código
    FileReader(«D:\\archivo.txt»);
    pero no deja de lanzarme la exepción de que no existe el archivo, ése archivo lo tengo en la misma carpeta en dónde tengo mi código, no sé que es lo que falla =(

  4. Disco Duro de Roer Post author

    FileReader busca el archivo donde le indiques, si dices que el archivo esta en donde esta el código, no lo estas referenciando bien, simplemente pon la ruta del fichero que me dices, puedes usar relativas (el directorio activo es la carpeta del proyecto).

    Cualquier duda no dudes en preguntar. Perdona la tardanza.

  5. emma

    hola este ejemplo me sirvio de maravilla ;para algo que estaba haciendo, pero tengo una duda, bueno primero active unos checkbox con la informacion de un file, o sea adentro del file dice true, true, false etc, ahora cada que alguien eliga el check que queda libre se tiene que almacenar la palabra true de que ya esta ocupado, pero no se como hacerlo de manera que se actualice el file que cree
    alguna idea?? gracias de antemano

  6. Disco Duro de Roer Post author

    Puedes hacer que cada vez que haya un cambio en los checkbox, rescriba ese fichero.

    Hay un evento llamado itemChanged para los checkbox.

    Un saludo.

  7. Wilfrido

    Oye como puedo hacer que el usuario ingrese la cadena y no que Yo ponga
    «Esto es una prueb» a eso es lo que me refiero porfa te lo agradeceria

  8. Lucas

    ¡Hola! Cómo puedo escribir enteros y no los convierta en ASCII? Gracias.

  9. admin Post author

    Aunque use ASCII, puedes insertar enteros, en la tabla los tienes.

    Un saludo.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *


Warning: Trying to access array offset on value of type null in /home2/discodur/public_html/discoduroderoer/wp-content/themes/disto/single.php on line 539