首页 > 解决方案 > 当一个资源包装另一个资源时,Java try-with-resource

问题描述

假设我需要这个实例new BufferedReader(new InputStreamReader(new FileInputStream(path))),使用 try with resource 编写它的最佳方法是什么。

1.我习惯写的——因为只有第一个Closable需要关闭

try (FileInputStream fileInputStream = new FileInputStream(path)) {
    BufferedReader reader = new BufferedReader(new InputStreamReader(fileInputStream));
    ...
}

2.最外层的Closable关闭其内层的Closable等。

try (BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(path)))) {
    ...
}

3. 为每个 Closable 使用单独的资源

try (
        FileInputStream fileInputSream = new FileInputStream(path);
        InputStreamReader inputStreamReader = new InputStreamReader(fileInputSream);
        BufferedReader reader = new BufferedReader(fileInputSream)) {
    ...
}

谢谢,

伊多·索罗宗

标签: javatry-with-resources

解决方案


我建议一个更具可读性的选项(提取方法):

try (BufferedReader reader = getBufferReader()) {

推荐阅读