Categorías
Exceptions I/O

¿Debería colocarse .close () en el bloque finalmente o no?

Las siguientes son 3 formas diferentes de cerrar un escritor de salida. El primero pone el método close () en la cláusula try, el segundo pone close en la cláusula finalmente y el tercero usa una declaración try-with-resources. ¿Cuál es el correcto o el mejor?

//close() is in try clause
try {
	PrintWriter out = new PrintWriter(
			new BufferedWriter(
			new FileWriter("out.txt", true)));
	out.println("the text");
	out.close();
} catch (IOException e) {
	e.printStackTrace();
}
//close() is in finally clause
PrintWriter out = null;
try {
	out = new PrintWriter(
		new BufferedWriter(
		new FileWriter("out.txt", true)));
	out.println("the text");
} catch (IOException e) {
	e.printStackTrace();
} finally {
	if (out != null) {
		out.close();
	}
}
//try-with-resource statement
try (PrintWriter out2 = new PrintWriter(
			new BufferedWriter(
			new FileWriter("out.txt", true)))) {
	out2.println("the text");
} catch (IOException e) {
	e.printStackTrace();
}

Respuesta

Debido a que Writer debe cerrarse en cualquier caso (excepción o no excepción), close () debe colocarse en la cláusula finalmente.

Desde Java 7, podemos usar probar-con-recursos declaración.

Por Programación.Click

Más de 20 años programando en diferentes lenguajes de programación. Apasionado del code clean y el terminar lo que se empieza. ¿Programamos de verdad?

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *