zoukankan      html  css  js  c++  java
  • java try-with-resource语句使用

    定义

    JDK7之后,Java多了个新的语法:try-with-resources语句,
    可以理解为是一个声明一个或多个资源的 try语句(用分号隔开),
    一个资源作为一个对象,并且这个资源必须要在执行完关闭的,
    try-with-resources语句确保在语句执行完毕后,每个资源都被自动关闭 。
    任何实现了** java.lang.AutoCloseable**的对象, 包括所有实现了 java.io.Closeable 的对象
    , 都可以用作一个资源。

    我们根据定义来自己实现一个玩玩:

    public class MyAutoClosable implements AutoCloseable {
        public void doIt() {
            System.out.println("MyAutoClosable doing it!");
        }
    
        @Override
        public void close() throws Exception {
            System.out.println("MyAutoClosable closed!");
        }
    
        public static void main(String[] args) {
            try(MyAutoClosable myAutoClosable = new MyAutoClosable()){
                myAutoClosable.doIt();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
    
     
    输出.png

    发现close方法被自动执行了,这个的好处在于,我们又可以变懒了,不用再去关心连接调用完了是否关闭,文件读写完了是否关闭,专心的实现业务即可。

    我们根据这个特性,来试下文件读写
    先试试传统写法

    public void readFile() throws FileNotFoundException {
            FileReader fr = null;
            BufferedReader br = null;
            try{
                fr = new FileReader("d:/input.txt");
                br = new BufferedReader(fr);
                String s = "";
                while((s = br.readLine()) != null){
                    System.out.println(s);
                }
            } catch (IOException e) {
                e.printStackTrace();
            }finally {
                try {
                    br.close();
                    fr.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    

    需要在最后finally中关闭读文件流。

    我们再试试try with resource写法

    public void readFile() throws FileNotFoundException {
    
            try(
                    FileReader fr = new FileReader("d:/input.txt");
                    BufferedReader br = new BufferedReader(fr)
            ){
                String s = "";
                while((s = br.readLine()) != null){
                    System.out.println(s);
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    

    代码也整洁了一些

    通过查看源码可以发现

    • public class FileReader extends InputStreamReader
    • public class InputStreamReader extends Reader
    • public abstract class Reader implements Readable, Closeable

    • public class BufferedReader extends Reader
    • public abstract class Reader implements Readable, Closeable

    发现FileReader和BufferedReader最终都实现了Closeable接口,所以根据try with resource 定义,他们都是可以自动关闭的。



    作者:程序鱼
    链接:https://www.jianshu.com/p/258c5ce1a2bd
    來源:简书
    简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。
     
  • 相关阅读:
    Java IO输入输出流 FileWriter 字符流
    Java IO输入输出流File 字节流
    Java List集合和Map集合的综合应用
    表单提交中的重复问题(表单令牌验证)
    php中const与define的区别
    阿里云中获取文件及目录列表的方法
    巧用php中的array_filter()函数去掉多维空值
    文件大小格式化函数
    UTC 通用格式时间 转换为 时间戳,并格式化为2017-01-01 12:00:00
    关于匿名函数的使用,购物车中计算销售税的应用
  • 原文地址:https://www.cnblogs.com/GarfieldEr007/p/10211542.html
Copyright © 2011-2022 走看看