try-with-resource与guava Closer

基本语法
try(…) {} ,try里面所有实现接口java.lang.AutoCloseable,包括java.io.Closeable的对象,在{}的语句块执行完毕后都会自动的close。

例如:

try (FileWriter fileWriter = new FileWriter(outFile);
PrintWriter printWriter = new PrintWriter(fileWriter)) {
for (int i = 0; i < template.length; i++) {
        printWriter.println(template[i]);
    }
} catch (IOException e) {
LOGGER.error("写出小说文件失败,文件路径:{}", filePath);
}
  1. fileWriter和printWriter都会在try的{}里面语句执行完后自动执行clone();
  2. try结束后自动调用的close方法,这个动作会早于finally里调用的方法。
  3. 不管是否出现异常,try()里的实例都会被调用close方法
  4. 越晚声明的对象,会越早被close掉。

guava给我们提供了方法。我们可以把Closeable 的对象注册到Closer对象上,资源使用完毕后,调用closer的close方法,就可以把所有注册了的资源安全的close掉。这个方法虽然没有try-with-resources好用,但是比起传统的jdk做法,要好很多了。

Closer closer = Closer.create();
try {
  InputStream in = closer.register(openInputStream());
  OutputStream out = closer.register(openOutputStream());
  // do stuff with in and out
} catch (Throwable e) { // must catch Throwable
  throw closer.rethrow(e);
} finally {
  closer.close();
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章