Java中使用try-with-resources

Java 7 中引入的对资源 try-with-resources ,声明在 try 块中使用的资源,并保证资源将在该块执行后关闭。声明的资源需要实现自动关闭接口

 

1.使用资源try

典型的try-catch-finally块:

复制代码
Scanner scanner = null;
try {
    scanner = new Scanner(new File("test.txt"));
    while (scanner.hasNext()) {
        System.out.println(scanner.nextLine());
    }
} catch (FileNotFoundException e) {
    e.printStackTrace();
} finally {
    if (scanner != null) {
        scanner.close();
    }
}
复制代码

 

使用资源try

try (Scanner scanner = new Scanner(new File("test.txt"))) {
    while (scanner.hasNext()) {
        System.out.println(scanner.nextLine());
    }
} catch (FileNotFoundException fnfe) {
    fnfe.printStackTrace();
}

 

2.使用多个资源try-with-resources 块,分号分隔

try (Scanner scanner = new Scanner(new File("read.txt"));
    PrintWriter writer = new PrintWriter(new File("write.txt"))) {
    while (scanner.hasNext()) {
    writer.print(scanner.nextLine());
    }
}

 

3.注意:

(1)首先定义的资源会最后关闭。

(2)若要构造将由 try-with-resources 块正确处理的自定义资源,该类应实现 Closeable 或 AutoCloseable 接口并重写 close 方法。

public class MyResource implements AutoCloseable {
    @Override
    public void close() throws Exception {
        System.out.println("Closed MyResource");
    }
}

 

4.Java 9 - 可以在资源try块中使用final甚至有效的final变量

final Scanner scanner = new Scanner(new File("read.txt"));
PrintWriter writer = new PrintWriter(new File("write.txt"))
try (scanner;writer) { 
}

 

posted @   coder_Fish  阅读(15)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
点击右上角即可分享
微信分享提示