下面是3种不同的关闭输出器(output writer)的方法。第一种方法将close()方法放到try语句中,第二种方法将close()方法放到finally语句中,而第三种方法使用了try-with-resources声明。哪一种方法是对的,或是最好的呢?
//将close()方法放到try语句中
try {
PrintWriter out = new PrintWriter(
new BufferedWriter(
new FileWriter("out.txt", true)));
out.println("the text");
out.close();
} catch (IOException e) {
e.printStackTrace();
}
//将close()方法放到finally语句中
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声明
try (PrintWriter out2 = new PrintWriter(
new BufferedWriter(
new FileWriter("out.txt", true)))) {
out2.println("the text");
} catch (IOException e) {
e.printStackTrace();
}
答案
无论是出现异常,还是没有异常,都需要关闭输出器(Writer),因此应该将close()方法放到finally语句中。
从Java 7开始,我们可以使用try-with-resource声明。