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í:
FileReaderabre el archivoBufferedReaderañ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 nullcuando 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ística | BufferedReader | Scanner |
|---|---|---|
| Rendimiento | Muy alto | Medio |
| Lectura línea a línea | Excelente | Buena |
| Lectura de tipos numéricos | Manual | Integrada |
| Uso en archivos grandes | Recomendado | Menos 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
BufferedReaderjunto conFileReader - leer mediante
readLine() - aprovechar
try-with-resourcesen 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.
