🇺🇦 Слава Україні! Consulta como ayudar a Ucrania y pide a tu gobierno que se movilice supportukrainenow.org.

Java IO

try-with-resources

try-with-resources es una forma alternativa de escribir el bloque try-catch cuando se trabaja con recursos que se pueden cerrar, para ocuparse automáticamente de hacer el close independientemente de si sale bien o si sale mal la operación, evitando que nos olvidemos de poner un finally.

Fecha de emisión:

Duración: 1:43

Ver en YouTube

Notas del episodio

Ya que estamos hablando de InputStreams y de OutputStreams, dejad que os presente al sistema try-with, que es una cosa que tiene Java para escribir de una forma alternativa las operaciones con este tipo de InputStreams, y en general con clases que tengan una función close(). Desde hace bastantes años, en Java existe una versión alternativa de try, en la cual lo que le pasamos como parámetro es un recurso con el que queramos trabajar. De hecho, apreciaréis que NetBeans, si estáis usando NetBeans, aunque es muy posible que vuestro IDE también lo esté sugiriendo incluso si no lo es, os proponga convertir esto a un try-with.

Si lo convertimos a un bloque try-with... esto es esencialmente poner un try con parámetro, que en este caso el parámetro es precisamente justo lo que queremos declarar. Queremos trabajar con este "fos" (FileOutputStream). Las condiciones en las que se trabaja con un try-with-resources: lo que venga entre paréntesis junto al try, se va a intentar abrir cuando inicie la ejecución del bloque try-catch. Cuando se abandone, bien porque salga bien, o bien porque salgamos a un bloque catch de los de fuera, se va a llamar automáticamente a close() en el instante en el que salgamos de este bloque try. De este modo, no tendremos que poner close(), y nos aseguramos de que nunca nos olvidamos de escribir ese close(), como hice yo aquí. Es muy sencillo de conseguir. Todo lo que tenemos que hacer es poner la apertura de nuestro InputStream o de nuestro OutputStream como paréntesis a la hora de llamar a try, y automáticamente se cerrará cuando salgamos por el finally, por el catch o de la forma que sea necesaria. Así nos aseguramos de que los recursos quedan siempre cerrados.