Java 关闭IOs的更好方法是什么?

Java 关闭IOs的更好方法是什么?,java,Java,参见代码: 我通常喜欢下面的 RandomAccessFile raf = null; try { // do something ... } catch (IOException e) { // logger } finally { try { if (null != raf) { raf.close(); } } catch (IOException e) { // logger

参见代码:

我通常喜欢下面的

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

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


但是它是否易于使用且具有高性能?

对于Java 7或更高版本,如果资源实现了自动关闭,最佳做法是使用:

资源将自动关闭。(是的,
catch
finally
子句对于try with resources是可选的。)


关于您问题中的代码:

  • 重新设置主
    catch
    块:“记录并忘记”通常不是最佳做法。要么不捕获异常(以便调用方能够处理它),要么正确处理它

  • >P>在<代码> catch <代码>块>最后,你关闭的地方,你完全正确地不允许它抛出(你可以掩盖主要的异常),但是看看SPEC定义的方式,尝试使用资源,并考虑遵循这个模式,其中包括任何一个从相近的异常,如:


    对于Java 7或更高版本,如果资源实现了
    自动关闭
    ,最佳做法是使用:

    资源将自动关闭。(是的,
    catch
    finally
    子句对于try with resources是可选的。)


    关于您问题中的代码:

  • 重新设置主
    catch
    块:“记录并忘记”通常不是最佳做法。要么不捕获异常(以便调用方能够处理它),要么正确处理它

  • >P>在<代码> catch <代码>块>最后,你关闭的地方,你完全正确地不允许它抛出(你可以掩盖主要的异常),但是看看SPEC定义的方式,尝试使用资源,并考虑遵循这个模式,其中包括任何一个从相近的异常,如:


    最好的方法是使用资源进行尝试。您可以在finally block中只检查条件,无需放入内部的“尝试和捕获”。好的,谢谢大家,我查看了
    使用资源进行尝试
    ,我学到了很多。@Chetan和if
    raf.close()
    抛出一个
    IOException
    ?最好的方法是尝试使用资源您可以只检查finally block中的条件,而无需放入内部try and catch。好的,谢谢大家,我查看了
    尝试使用资源
    ,我学到了很多。@Chetan如果
    raf.close()
    抛出一个
    IOException
    ?是的,谢谢,我查看了
    试用资源
    ,感谢您告诉我这一点!我看到
    closeable
    扩展了
    autocloseable
    …是的,谢谢,我查看了
    try with resources
    ,谢谢你告诉我这个!我看到
    closeable
    扩展了
    autocloseable
    。。。。
    try (
        RandomAccessFile raf = /*construct it */
    ) {
        // Use it...
    }