Ir al contenido

try-with-resources

Cuando se trabaja con ficheros es importante cerrarlos correctamente después de usarlos. Si no se cierran, pueden quedar bloqueados o generar errores en el sistema.


Es una variante del bloque try que permite gestionar automáticamente el cierre de recursos. Esto incluye clases comunes como BufferedReader, BufferedWriter, FileReader, FileWriter, entre muchas otras.

Un recurso es cualquier objeto que usa el sistema operativo y que debe cerrarse manualmente, como un archivo, flujo de datos o conexión. Debe implementar la interfaz AutoCloseable para usarse en try-with-resources.

El cierre del recurso ocurre automáticamente al finalizar el bloque, incluso si se lanza una excepción dentro del mismo.


El recurso debe declararse dentro del paréntesis del try:

try (BufferedReader lector = new BufferedReader(new FileReader("archivo.txt"))) {
String linea = lector.readLine();
System.out.println(linea);
} catch (IOException e) {
System.out.println("Error al leer: " + e.getMessage());
}
// No hace falta cerrar el lector con close(), se cierra solo

El recurso (por ejemplo, BufferedReader, FileReader, etc.) debe implementarse dentro del paréntesis del try.


Ventaja Descripción
Cierre automático de recursos No es necesario invocar manualmente close(). El sistema lo hace al final del bloque.
Código más limpio y legible Evita bloques finally redundantes para cerrar archivos.
Manejo robusto de errores Asegura el cierre incluso cuando ocurre una excepción, reduciendo riesgos de fugas de recursos.
Compatible con múltiples recursos Se pueden declarar varios recursos separados por punto y coma ; dentro del mismo try.

try (
BufferedReader lector = new BufferedReader(new FileReader("entrada.txt"));
BufferedWriter escritor = new BufferedWriter(new FileWriter("salida.txt"))
) {
String linea;
while ((linea = lector.readLine()) != null) {
escritor.write(linea);
escritor.newLine();
}
} catch (IOException e) {
System.err.println("Error durante la operación de archivos: " + e.getMessage());
}