JDK7-try-with-resources

jdk7之前的写法try-catch-finally

package com.wjz.jdk7.before;
 
import java.io.*;
 
public class TryCatchFinally {
 
    private static final String src = "D:/src.txt";
    private static final String dst = "D:/dst.txt";
 
    public static void main(String[] args) {
        copy(src, dst);
        System.out.println("复制成功!");
    }
 
    public static void copy(String src, String dst) {
        InputStream in = null;
        OutputStream out = null;
        try {
            in = new FileInputStream(src);
            out = new FileOutputStream(dst);
            byte[] buff = new byte[1024];
            int n;
            while ((n = in.read(buff)) >= 0) {
                out.write(buff, 0, n);
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (in != null) {
                try {
                    in.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if (out != null) {
                try {
                    out.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}

jdk7之后的写法try-with-resources

package com.wjz.jdk7.after;

import java.io.*;

/**
 * try-with-resources 声明要求其中定义的变量实现 AutoCloseable 接口,
 * 这样系统可以自动调用它们的close方法从而替代了finally中关闭资源的功能,
 * 甜甜的语法糖
 */
public class TryWithResources {

    private static final String src = "D:/src.txt";
    private static final String dst = "D:/dst.txt";

    public static void main(String[] args) {
        copy(src, dst);
        System.out.println("复制成功!");
    }

    public static void copy(String src, String dst) {
        try (InputStream in = new FileInputStream(src);
             OutputStream out = new FileOutputStream(dst)) {
            byte[] buff = new byte[1024];
            int n;
            while ((n = in.read(buff)) >= 0) {
                out.write(buff, 0, n);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

自定义资源

package com.wjz.jdk7.autoclose;

import java.io.IOException;

public class Resource implements AutoCloseable {

    public void sayHello() {
        System.out.println("hello");
    }

    @Override
    public void close() throws IOException {
        System.out.println("Resource is closed");
    }

    public static void main(String[] args) {
        try (Resource r = new Resource()) {
            r.sayHello();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

  

posted @ 2020-06-18 09:33  BINGJJFLY  阅读(222)  评论(0编辑  收藏  举报