En este tema, aprenderemos sobre dos clases fundamentales en Java para la lectura y escritura de archivos: BufferedReader y BufferedWriter. Estas clases son parte del paquete java.io y se utilizan para mejorar la eficiencia de las operaciones de entrada/salida (I/O) al proporcionar un buffer que reduce el número de accesos al disco.

Objetivos

  • Comprender qué son BufferedReader y BufferedWriter.
  • Aprender a utilizar BufferedReader para leer archivos.
  • Aprender a utilizar BufferedWriter para escribir archivos.
  • Realizar ejercicios prácticos para consolidar el conocimiento.

¿Qué es BufferedReader?

BufferedReader es una clase que se utiliza para leer texto de una secuencia de entrada de manera eficiente. Lee caracteres, matrices de caracteres y líneas. La eficiencia se logra mediante el uso de un buffer que almacena temporalmente los datos leídos.

Sintaxis Básica

BufferedReader br = new BufferedReader(new FileReader("archivo.txt"));

Métodos Comunes

  • read(): Lee un solo carácter.
  • readLine(): Lee una línea completa de texto.
  • close(): Cierra el flujo y libera los recursos asociados.

Ejemplo Práctico

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;

public class BufferedReaderExample {
    public static void main(String[] args) {
        try (BufferedReader br = new BufferedReader(new FileReader("archivo.txt"))) {
            String linea;
            while ((linea = br.readLine()) != null) {
                System.out.println(linea);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

Explicación:

  1. Se crea un BufferedReader que envuelve un FileReader.
  2. Se lee cada línea del archivo usando readLine() hasta que no haya más líneas (null).
  3. Se imprime cada línea en la consola.
  4. El bloque try-with-resources asegura que el BufferedReader se cierre automáticamente.

¿Qué es BufferedWriter?

BufferedWriter es una clase que se utiliza para escribir texto en una secuencia de salida de manera eficiente. Al igual que BufferedReader, utiliza un buffer para reducir el número de accesos al disco.

Sintaxis Básica

BufferedWriter bw = new BufferedWriter(new FileWriter("archivo.txt"));

Métodos Comunes

  • write(String s): Escribe una cadena de texto.
  • newLine(): Escribe un separador de línea.
  • flush(): Vacía el buffer, escribiendo todos los datos almacenados en él.
  • close(): Cierra el flujo y libera los recursos asociados.

Ejemplo Práctico

import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;

public class BufferedWriterExample {
    public static void main(String[] args) {
        try (BufferedWriter bw = new BufferedWriter(new FileWriter("archivo.txt"))) {
            bw.write("Primera línea de texto");
            bw.newLine();
            bw.write("Segunda línea de texto");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

Explicación:

  1. Se crea un BufferedWriter que envuelve un FileWriter.
  2. Se escribe una cadena de texto en el archivo.
  3. Se escribe un separador de línea usando newLine().
  4. Se escribe otra cadena de texto.
  5. El bloque try-with-resources asegura que el BufferedWriter se cierre automáticamente.

Ejercicio Práctico

Ejercicio 1: Leer y Escribir Archivos

Objetivo: Leer el contenido de un archivo y escribirlo en otro archivo.

Instrucciones:

  1. Crea un archivo de texto llamado entrada.txt con varias líneas de texto.
  2. Escribe un programa que lea el contenido de entrada.txt usando BufferedReader y lo escriba en un nuevo archivo llamado salida.txt usando BufferedWriter.

Solución:

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

public class CopyFileExample {
    public static void main(String[] args) {
        try (BufferedReader br = new BufferedReader(new FileReader("entrada.txt"));
             BufferedWriter bw = new BufferedWriter(new FileWriter("salida.txt"))) {
            String linea;
            while ((linea = br.readLine()) != null) {
                bw.write(linea);
                bw.newLine();
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

Explicación:

  1. Se crea un BufferedReader para leer entrada.txt.
  2. Se crea un BufferedWriter para escribir en salida.txt.
  3. Se lee cada línea de entrada.txt y se escribe en salida.txt.
  4. Se asegura que ambos flujos se cierren automáticamente usando try-with-resources.

Conclusión

En esta lección, hemos aprendido a utilizar BufferedReader y BufferedWriter para leer y escribir archivos de manera eficiente en Java. Estas clases son esenciales para manejar operaciones de I/O en aplicaciones del mundo real, donde la eficiencia y la gestión adecuada de recursos son cruciales. Asegúrate de practicar con los ejemplos y ejercicios proporcionados para consolidar tu comprensión. En el próximo tema, exploraremos la serialización en Java.

Curso de Programación en Java

Módulo 1: Introducción a Java

Módulo 2: Flujo de Control

Módulo 3: Programación Orientada a Objetos

Módulo 4: Programación Orientada a Objetos Avanzada

Módulo 5: Estructuras de Datos y Colecciones

Módulo 6: Manejo de Excepciones

Módulo 7: Entrada/Salida de Archivos

Módulo 8: Multihilo y Concurrencia

Módulo 9: Redes

Módulo 10: Temas Avanzados

Módulo 11: Frameworks y Librerías de Java

Módulo 12: Construcción de Aplicaciones del Mundo Real

© Copyright 2024. Todos los derechos reservados