java.util.logging.FileHandler 如何使用 try-with-resources?
How to use try-with-resources for java.util.logging.FileHandler?
我有以下代码并使用 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
class 没有实现 AutoCloseable
接口。
因此,您不能在 FileHandler
上使用 try-with-resources
。
因此,您必须显式调用 close()
方法。
因此,您必须采用第一种方法。
public class Example {
private static Logger logger = Logger.getLogger("...");
public static void main(String[] args) {
FileHandler fh = null;
try {
fh = new FileHandler("Test.log");
logger.addHandler(fh);
} catch (IOException e) {
e.printStackTrace();
} finally {
if (fh != null) {
fh.close();
}
}
}
}
您可以尝试创建自己的自定义 Filehandler
class 并在其中实现 AutoCloseable
界面。
例如:
class CustomFileHandler implements AutoCloseable {
private FileHandler fileHandler;
public CustomFileHandler(FileHandler fileHandler) {
this.setFileHandler(fileHandler);
}
@Override
public void close() throws Exception {
if (fileHandler != null) {
fileHandler.close();
}
}
public FileHandler getFileHandler() {
return fileHandler;
}
private void setFileHandler(FileHandler fileHandler) {
this.fileHandler = fileHandler;
}
}
public class Example {
private static Logger logger = Logger.getLogger("...");
public static void main(String[] args) {
try (CustomFileHandler fh = new CustomFileHandler(new FileHandler("Test.log"))) {
logger.addHandler(fh.getFileHandler());
........
} catch (Exception e) {
e.printStackTrace();
}
}
}
我有以下代码并使用 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
class 没有实现 AutoCloseable
接口。
因此,您不能在 FileHandler
上使用 try-with-resources
。
因此,您必须显式调用 close()
方法。
因此,您必须采用第一种方法。
public class Example {
private static Logger logger = Logger.getLogger("...");
public static void main(String[] args) {
FileHandler fh = null;
try {
fh = new FileHandler("Test.log");
logger.addHandler(fh);
} catch (IOException e) {
e.printStackTrace();
} finally {
if (fh != null) {
fh.close();
}
}
}
}
您可以尝试创建自己的自定义 Filehandler
class 并在其中实现 AutoCloseable
界面。
例如:
class CustomFileHandler implements AutoCloseable {
private FileHandler fileHandler;
public CustomFileHandler(FileHandler fileHandler) {
this.setFileHandler(fileHandler);
}
@Override
public void close() throws Exception {
if (fileHandler != null) {
fileHandler.close();
}
}
public FileHandler getFileHandler() {
return fileHandler;
}
private void setFileHandler(FileHandler fileHandler) {
this.fileHandler = fileHandler;
}
}
public class Example {
private static Logger logger = Logger.getLogger("...");
public static void main(String[] args) {
try (CustomFileHandler fh = new CustomFileHandler(new FileHandler("Test.log"))) {
logger.addHandler(fh.getFileHandler());
........
} catch (Exception e) {
e.printStackTrace();
}
}
}