gpt4 book ai didi

Java try-with-resource - 关闭资源时记录错误

转载 作者:行者123 更新时间:2023-12-02 12:48:31 25 4
gpt4 key购买 nike

我有以下内容:-

private static String loadString(File f) {
StringBuffer results = new StringBuffer();
Reader reader = null;
try {
reader = new BufferedReader(new InputStreamReader(...));
...
while (reader.read(data) >= 0) {
...
}
} catch (IOException e) {
logger.warn(....);
} finally {
try {
reader.close();
} catch (IOException e) {
logger.warn(....);
}
}
return results.toString();
}

我想使用 Java 7 try-with-resources 自动关闭资源,但也想在关闭流时出现错误时保留记录的警告,并且此日志消息将与此不同当从 try 主体抛出异常后捕获异常时,会在上面记录。
执行此操作的最优雅的方法是什么,因为我认为 try 子句和资源的关闭都抛出相同的异常,这可能会使维护这两个单独的记录器警告变得棘手?
提前致谢

最佳答案

如果关闭资源时抛出异常,则在处理从 try block 内部抛出的另一个异常时,该异常将被抑制并添加到初始异常中。

如果日志框架支持抑制异常,并且您将异常提供给日志框架,那么您不需要执行任何操作。

否则,您需要自己记录被抑制的异常,如下所示:

private static String loadString(File f) {
StringBuffer results = new StringBuffer();
try (Reader reader = new BufferedReader(new InputStreamReader(new FileInputStream(f)))) {
...
while (reader.read(data) >= 0) {
...
}
} catch (IOException e) {
logger.warn(....);
for (Throwable ex : e.getSuppressed())
logger.warn(....);
}
return results.toString();
}

关于Java try-with-resource - 关闭资源时记录错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44659032/

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