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
    评论
Java中,try-catch-finally是一种异常处理机制。根据引用[2],catchfinally语句块可以省略其中一个。也就是说,你可以只使用try-finallytry-catch来处理异常。如果你选择省略catch语句块,你需要确保try语句块中不会抛出编译时异常。因为catch语句块用于捕获和处理异常,如果你没有提供catch语句块来处理异常,编译器会报错。然而,对于运行时异常,你可以选择省略catch语句块,因为编译器没有硬性规定必须捕获这些异常。所以,如果你省略了catch语句块,编译器会接受这种写法,并且在运行时,异常会被finally语句块中的代码处理。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [try-catch-finally 中哪个部分可以省略?常见的异常类有哪些?](https://blog.csdn.net/weixin_33971453/article/details/115068720)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [try-catch-finally 中哪个部分可以省略?](https://blog.csdn.net/meism5/article/details/90414167)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值