try-with-resources
5. Uso de try-with-resources
Sección titulada «5. Uso de 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.
5.1 Definición
Sección titulada «5.1 Definición»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
AutoCloseablepara usarse entry-with-resources.
El cierre del recurso ocurre automáticamente al finalizar el bloque, incluso si se lanza una excepción dentro del mismo.
5.2 Estructura
Sección titulada «5.2 Estructura»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 soloEl recurso (por ejemplo,
BufferedReader,FileReader, etc.) debe implementarse dentro del paréntesis deltry.
5.3 Ventajas
Sección titulada «5.3 Ventajas»| 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. |
5.4 Declaración de múltiples recursos
Sección titulada «5.4 Declaración de múltiples recursos»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());}