Java BufferedReader: cómo leer archivos en Java con ejemplos prácticos

Leer archivos es una de las tareas más comunes en cualquier aplicación Java. Ya sea para procesar configuraciones, importar datos o analizar registros, Java ofrece varias formas de acceder al contenido de un archivo.

Una de las más utilizadas es BufferedReader, una clase diseñada para leer texto de manera eficiente gracias al uso de un búfer interno que reduce el número de accesos al disco.

¿Qué es BufferedReader en Java?

BufferedReader es una clase del paquete:

java.io

que permite leer texto desde un flujo de entrada (Input Stream) almacenando temporalmente los caracteres en memoria.

Su principal ventaja es el rendimiento.

En lugar de acceder al archivo cada vez que se solicita un carácter o una línea, BufferedReader carga bloques de datos en memoria y los sirve desde allí, reduciendo significativamente las operaciones de lectura.


¿Por qué usar BufferedReader?

Sin almacenamiento en búfer, cada operación de lectura puede implicar un acceso directo al sistema de archivos.

Con BufferedReader:

  • se reducen las operaciones de E/S (Input/Output)
  • mejora el rendimiento
  • facilita la lectura línea por línea
  • simplifica el procesamiento de archivos de texto

Por esta razón suele utilizarse junto con:

FileReader

o

InputStreamReader

Sintaxis básica de BufferedReader

La forma más habitual de crear un BufferedReader es:

BufferedReader reader =
        new BufferedReader(
            new FileReader("D:\\DukesDiary.txt"));

Aquí:

  • FileReader abre el archivo
  • BufferedReader añade una capa de optimización mediante búfer

Leer un archivo línea por línea

El método más utilizado es:

readLine()

Este método devuelve:

  • una cadena (String) con la línea actual
  • null cuando se alcanza el final del archivo

Ejemplo:

String linea;

while ((linea = reader.readLine()) != null) {
    System.out.println(linea);
}

Ejemplo completo con BufferedReader

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

public class ReadFileExample {

    public static void main(String[] args) {

        BufferedReader objReader = null;

        try {

            String strCurrentLine;

            objReader = new BufferedReader(
                    new FileReader("D:\\DukesDiary.txt"));

            while ((strCurrentLine = objReader.readLine()) != null) {

                System.out.println(strCurrentLine);
            }

        } catch (IOException e) {

            e.printStackTrace();

        } finally {

            try {

                if (objReader != null) {
                    objReader.close();
                }

            } catch (IOException ex) {

                ex.printStackTrace();
            }
        }
    }
}

Salida esperada

Si el archivo contiene:

Today I learned Java.
BufferedReader is easy to use.
Reading files is simple.

La salida será:

Today I learned Java.
BufferedReader is easy to use.
Reading files is simple.

¿Por qué es importante cerrar el BufferedReader?

Cuando Java abre un archivo, el sistema operativo reserva recursos para gestionarlo.

Por ello es fundamental ejecutar:

objReader.close();

Esto:

  • libera memoria
  • libera descriptores de archivo
  • evita fugas de recursos
  • mejora la estabilidad de la aplicación

BufferedReader en Java 7 y versiones posteriores

A partir de Java 7 apareció una característica llamada:

try-with-resources

Esta funcionalidad permite que Java cierre automáticamente los recursos abiertos.

Gracias a ello ya no es necesario utilizar un bloque finally para cerrar el archivo.


Ejemplo con try-with-resources

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

public class ReadFileExampleJDK7 {

    private static final String FILENAME =
            "D:\\DukesDiary.txt";

    public static void main(String[] args) {

        try (BufferedReader br =
                     new BufferedReader(
                             new FileReader(FILENAME))) {

            String strCurrentLine;

            while ((strCurrentLine = br.readLine()) != null) {

                System.out.println(strCurrentLine);
            }

        } catch (IOException e) {

            e.printStackTrace();
        }
    }
}

Ventajas de try-with-resources

Este enfoque ofrece varias mejoras:

Menos código

No es necesario escribir:

finally {
    reader.close();
}

Mayor seguridad

Incluso si ocurre una excepción, Java cerrará automáticamente el recurso.

Código más limpio

La lógica de lectura queda más clara y fácil de mantener.


Métodos útiles de BufferedReader

readLine()

Lee una línea completa.

String linea = br.readLine();

read()

Lee un único carácter.

int caracter = br.read();

ready()

Comprueba si existen datos disponibles para leer.

if(br.ready()){
    System.out.println("Hay datos disponibles");
}

close()

Cierra el flujo de lectura.

br.close();

BufferedReader vs Scanner

Muchos desarrolladores se preguntan cuál utilizar.

CaracterísticaBufferedReaderScanner
RendimientoMuy altoMedio
Lectura línea a líneaExcelenteBuena
Lectura de tipos numéricosManualIntegrada
Uso en archivos grandesRecomendadoMenos eficiente

¿Cuándo usar BufferedReader?

  • Archivos grandes
  • Máximo rendimiento
  • Lectura intensiva de texto

¿Cuándo usar Scanner?

  • Entradas simples
  • Programas educativos
  • Lectura combinada de números y texto

Conclusión

BufferedReader es una de las herramientas más eficientes para leer archivos de texto en Java. Gracias a su sistema de almacenamiento en búfer reduce las operaciones de entrada/salida y mejora significativamente el rendimiento.

Las prácticas recomendadas actuales incluyen:

  • usar BufferedReader junto con FileReader
  • leer mediante readLine()
  • aprovechar try-with-resources en Java 7 o superior
  • cerrar siempre los recursos abiertos

Para aplicaciones que procesan grandes cantidades de texto, BufferedReader sigue siendo una de las opciones más rápidas, fiables y utilizadas dentro del ecosistema Java.

Vistas: 0
Scroll al inicio