java try with resources方式关闭资源

在我们使用资源时,一般资源使用完毕,都需要把资源关闭掉,在JDK7之前,我们一般都是使用try-catch-finally在finally中进行资源的关闭。
示例如下:
    public static void test1(){
        FileInputStream ins = null;
        FileOutputStream out = null;
        try {
            ins = new FileInputStream(new File("G://aa.text"));
            out = new FileOutputStream(new File("G://bb.text"));
            //业务逻辑
        }catch (FileNotFoundException ex){
            ex.printStackTrace();
        }finally {
            //关闭资源
            if(ins != null){
                try {
                    ins.close();
                }catch (Exception insex){
                    insex.printStackTrace();
                }
            }
            if(out != null){
                try {
                    out.close();
                }catch (Exception outex){
                    outex.printStackTrace();
                }
            }
        }
    }
我们使用了输入流和输出流,在使用完后,需要手动去关闭。
在jdk7后,提供了一种新的方式:try-with-resources 方式来管理资源,在try中声明资源,当程序执行完后,会自动将声明的资源关闭掉,方式如下:
    public static void test2(){
        try(FileInputStream ins = new FileInputStream(new File("G:/aa.text"));
            FileOutputStream out = new FileOutputStream(new File("G://bb.text"))){
            //业务逻辑
        }catch (FileNotFoundException fnex){
            fnex.printStackTrace();
        }catch (IOException ioex){
            ioex.printStackTrace();
        }
    }

附:
资源一般是指:实现了Closeable接口或者AutoCloseable接口,这种资源使用完毕后都需要关闭。

package java.io;

import java.io.IOException;

/**
 * A {@code Closeable} is a source or destination of data that can be closed.
 * The close method is invoked to release resources that the object is
 * holding (such as open files).
 *
 * @since 1.5
 */
public interface Closeable extends AutoCloseable {

    /**
     * Closes this stream and releases any system resources associated
     * with it. If the stream is already closed then invoking this
     * method has no effect.
     *
     * <p> As noted in {@link AutoCloseable#close()}, cases where the
     * close may fail require careful attention. It is strongly advised
     * to relinquish the underlying resources and to internally
     * <em>mark</em> the {@code Closeable} as closed, prior to throwing
     * the {@code IOException}.
     *
     * @throws IOException if an I/O error occurs
     */
    public void close() throws IOException;
}

猜你喜欢

转载自blog.csdn.net/weixin_39800144/article/details/81169357