gpt4 book ai didi

java - 关闭文件会失败吗?

转载 作者:行者123 更新时间:2023-12-03 12:10:44 26 4
gpt4 key购买 nike

我看到这段代码,想知道为什么 in.close() 是在 finally block 中完成的。 try-with resources 的要点是它关闭正确的resources

  File file = new File(FILE_NAME);
FileInputStream in = null;

try (in = new FileInputStream(file)){
//do something
} catch (final FileNotFoundException e) {
log.log(Level.WARNING, "file not found, " + file.getAbsolutePath(), e);
} catch (final IOException e) {
log.log(Level.WARNING, "cannot access the file for reading", e);
} finally {
if (in != null){
try {
in.close();
} catch (final IOException e) {
log.log(Level.WARNING, "Attempt to close file failed.", e);
}
}
}

在Java中使用try-with-resources会不会出现文件可以打开但无法关闭的情况?

最佳答案

示例中的 finally block 是多余的。 try-with-resources 语句基本上做同样的事情(但更不容易出错!)。因为它是在 try-with-resources 语句尝试关闭资源之后执行的,所以 finally block 本质上是一个 noop(可能会在第一次尝试关闭资源后成功)失败 - 但如果这甚至是可能的,这是一个可以忽略不计的边缘案例,当然是不确定的)。

请注意,相比之下,catch block 很重要。关闭资源的尝试将在 catch block 被激活之前发生,从而导致出现多个异常的可能性。这可以通过使用抑制异常来解决。因此,如果使用资源失败,仍然会尝试正确关闭它(这通常也会失败) catch block 将接收第一个(很可能是根) 原因,而不是关闭隐藏第一个错误时抛出的异常。

更多信息见官方documentation !

关于java - 关闭文件会失败吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21564601/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com