我是Java的新手,只是让我的头脑回到FileReader / FileWriter,但遇到了一些我不理解的东西,所以如果有人能解释为什么第一次尝试/捕获不起作用而第二次尝试/捕获呢? / p>
不起作用
try{
FileWriter filewriter = new FileWriter(filepath);
filewriter.write(json.toString());
saved = true;
} catch (IOException ex) {
Logger.getLogger(PresetData.class.getName()).log(Level.SEVERE, null, ex);
}
有效吗
try(FileWriter filewriter = new FileWriter(filepath)){
filewriter.write(json.toString());
saved = true;
} catch (IOException ex) {
Logger.getLogger(PresetData.class.getName()).log(Level.SEVERE, null, ex);
}
将它放在那里而不是在try / catch中有什么区别?
感谢任何指导。
答案 0 :(得分:2)
第一个示例仅捕获异常,但从不释放资源。 您必须通过调用finally块中的.close()函数手动关闭它:https://docs.oracle.com/javase/7/docs/api/java/io/OutputStreamWriter.html#close()
第二个例子被称为"尝试使用资源"你可以在这里阅读:https://docs.oracle.com/javase/tutorial/essential/exceptions/tryResourceClose.html - >它将自动为您调用.close()函数,因此您不必担心资源泄漏。
通过catch-block进行的异常处理在两个示例中都是相同的。