【发布时间】:2020-06-05 06:35:06
【问题描述】:
我有以下代码并使用java.util.logging.FileHandler 创建日志文件。
在这种情况下,我应该手动关闭 finally 块中的资源。
try {
fh = new FileHandler("Test.log");
logger.addHandler(fh);
...
} catch (IOException e) {
e.printStackTrace();
} finally {
if(fh!=null) { fh.close() };
}
此代码有效。现在,我认为它可以实现Autocloseable 接口。因此,我决定将try-with-resources 用于FileHandler,以便自动关闭资源(以消除手动关闭资源的工作)。
我试过的代码如下:
try(fh = new FileHandler("Test.log")) {
logger.addHandler(fh);
...
} catch (IOException e) {
e.printStackTrace();
}
但是这段代码不起作用。
它给出一个错误说:
The resource type FileHandler does not implement java.lang.AutoCloseable'
如果可能,如何使用 try-with-resources 自动关闭文件处理程序?
我需要手动关闭吗?或者我可以采取任何其他方法。
【问题讨论】:
-
这没有意义。您需要处理程序保持打开状态。
-
为什么要将
FileHandler添加到记录器,然后关闭它?它没有实现AutoClosable,因为它不应该那样使用。 -
那你为什么不通过配置文件来做呢?
-
@AnishB。哦,是的。请参阅Javadoc。
-
只是为了记录,实际上有一个增强请求让
Handler实现AutoCloseable- 所以可能有这样的用例:bugs.openjdk.java.net/browse/JDK-8025709
标签: java try-with-resources autocloseable