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.