带资源的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 2020-01-16 10:27  qqq9527  阅读(583)  评论(0编辑  收藏  举报

导航