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
块:“记录并忘记”通常不是最佳做法。要么不捕获异常(以便调用方能够处理它),要么正确处理它对于Java 7或更高版本,如果资源实现了
自动关闭
,最佳做法是使用:
资源将自动关闭。(是的,catch
和finally
子句对于try with resources是可选的。)
关于您问题中的代码:
catch
块:“记录并忘记”通常不是最佳做法。要么不捕获异常(以便调用方能够处理它),要么正确处理它最好的方法是使用资源进行尝试。您可以在finally block中只检查条件,无需放入内部的“尝试和捕获”。好的,谢谢大家,我查看了
使用资源进行尝试,我学到了很多。@Chetan和ifraf.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...
}