带资源的try语句块介绍

在我们使用try() catch(){}的时候,如果涉及到流操作,经常需要关闭流比如:

复制代码
 1         File file = new File("C:/Users/test.done");
 2         File newFile = new File(file.getAbsolutePath().replaceAll("\\.done$",".txt"));
 3         BufferedReader bufferedReader = null;
 4         BufferedWriter bufferedWriter = null;
 5         String line = "";
 6         try {
 7             bufferedReader = new BufferedReader(new InputStreamReader(new FileInputStream(file)));
 8             bufferedWriter = new BufferedWriter(new FileWriter(newFile));
 9             while ((line = bufferedReader.readLine()) != null) {
10                 bufferedWriter.write(line+System.lineSeparator());
11             }
12         } catch (Exception e) {
13             e.printStackTrace();
14         } finally {
15             if(null != bufferedReader){
16                 try {
17                     bufferedReader.close();
18                 } catch (IOException e) {
19                     e.printStackTrace();
20                 }
21             }
22             if(null != bufferedWriter){
23                 try {
24                     bufferedWriter.close();
25                 } catch (IOException e) {
26                     e.printStackTrace();
27                 }
28             }
29         }
复制代码

代码比较繁琐且很不方便,因此有简化的写法:

复制代码
 1      File file = new File("C:/Users/test.done");
 2         File newFile = new File(file.getAbsolutePath().replaceAll("\\.done$",".txt"));
 3         String line = "";
 4         try(BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(new FileInputStream(file)));
 5                 BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter(newFile));) {
 6             while ((line = bufferedReader.readLine()) != null) {
 7                 bufferedWriter.write(line+System.lineSeparator());
 8             }
 9         } catch (Exception e) {
10             e.printStackTrace();
11         } 
复制代码

这种带资源的try语句(try-with-resource)在try块退出时,会自动调用bufferedReader.close()和bufferedWriter.close()方法,关闭资源,是不是很方便。

posted on   qqq9527  阅读(594)  评论(0编辑  收藏  举报

编辑推荐:
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

导航

统计

点击右上角即可分享
微信分享提示