try catch文件流写法 为什么可以不加finally关闭流

try (FileReader fileReader = new FileReader(filePath); 
BufferedReader bufferedReader = new BufferedReader(fileReader)){
}catch (IOException e) {
     e.printStackTrace();
}

在这段代码中没有使用finally关闭流的原因:

在这段代码中,使用了try-catch语句块来捕获异常并处理。在这种情况下,流是在try语句块的作用域中定义的,而try语句块在执行完毕后,会自动关闭已定义的资源,包括文件流。

这种自动关闭资源的机制是从Java 7开始引入的,称为"try-with-resources"语句。在使用try-with-resources语句时,可以在try后面的括号中定义需要自动关闭的资源,当try语句块执行完毕或抛出异常时,这些资源会被自动关闭。

因此,在你的代码中,无需手动编写finally块来关闭流,因为try-with-resources语句会自动完成这个任务。这样可以简化代码,并且确保资源的正确关闭,避免了因为忘记关闭流而导致的资源泄漏问题。

需要注意的是,在使用try-with-resources语句时,资源的类型必须实现AutoCloseable接口,以便在try块结束时自动调用其close()方法来关闭资源。在你的代码中,FileReader和BufferedReader都实现了AutoCloseable接口,所以可以正常使用try-with-resources语句来自动关闭流。

 

除了FileReaderBufferedReader,还有以下几种文件流实现了AutoCloseable接口:

  1. FileWriter - 用于写入字符到文件中。
  2. BufferedWriter - 提供了缓冲写入功能,可用于高效地写入字符到文件中。
  3. PrintWriter - 用于格式化输出到文件。
  4. InputStreamReader - 用于从输入流中读取字符。
  5. BufferedInputStream - 提供了缓冲读取功能,可用于高效地从输入流中读取字符。
  6. OutputStreamWriter - 用于将字符写入到输出流中。
  7. BufferedOutputStream - 提供了缓冲写入功能,可用于高效地将字符写入到输出流中。

这些文件流实现了AutoCloseable接口,因此它们也可以在try-with-resources语句中使用,并在作用域结束时自动关闭。

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值