try-with-resource与guava Closer

本文介绍了Java中try-with-resources语句的使用方法,该语句能够自动关闭实现了AutoCloseable接口的对象,简化了资源管理流程。同时展示了Guava提供的Closer类作为替代方案,用于统一管理多个可关闭资源。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

基本语法
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();
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值