最好的方法是使用 Java 7 并使用资源尝试,或者手动执行相同的操作并将关闭时的异常添加为抑制的异常。
Pre Java 7:如果您要抛出自定义异常,则可以像在 Java 7 中那样添加抑制异常(在您的异常中创建字段列表被抑制并放置关闭操作中的异常,在处理您的异常时,看看那里也。如果你不能这样做,我不知道什么比记录它更好。
示例:来自Java 教程
static String readFirstLineFromFile(String path) throws IOException {
try (BufferedReader br = new BufferedReader(new FileReader(path))) {
return br.readLine();
}
}
但更好的形式是:
static String readFirstLineFromFile(String path) throws IOException {
try (FileReader fr = new FileReader(path);
BufferedReader br = new BufferedReader(fr)) {
return br.readLine();
}
}
这样即使 FileReader 创建成功但 BufferedReader 创建失败(例如内存不足),FileReader 也会被关闭。