关闭IO的更好方法是什么?

时间:2017-03-14 07:18:31

标签: java

参见代码:

我通常喜欢下面的

RandomAccessFile raf = null;
try {
    // do something ...
} catch (IOException e) {
    // logger
} finally {
    try {
        if (null != raf) {
            raf.close();
        }
    } catch (IOException e) {
        // logger
    }
}

然后我看到我可以在Java8中执行此操作

try (RandomAccessFile raf = ... ) {
    // do something ...
} catch (IOException e) {
    // logger
}

这似乎是一个好方法。

看起来Java可以完成关闭IO的工作。

编辑1

就个人而言,我喜欢第二种方式。

但使用效果好还是性能很好?

1 个答案:

答案 0 :(得分:2)

使用Java 7或更高版本,如果资源实现AutoCloseable,最佳做法是使用try-with-resources

try (
    RandomAccessFile raf = /*construct it */
) {
    // Use it...
}

资源将自动关闭。 (是的,catchfinally子句是try-with-resources的可选项。)

关于你问题中的代码:

  1. 重新发布主catch块:“记录并忘记”通常不是最佳做法。要么没有捕获异常(所以调用者可以处理它)或正确处理它。

  2. catch你正在关闭的finally区块中,你很可能不允许抛出(你可以掩盖主要的异常),但是看看规范定义try-with-resources的方式,并考虑遵循该模式,其中包括来自close的任何异常suppressed exception