正确的方法来关闭文件并在同一时间传播异常

时间:2012-03-13 09:15:54

标签: java exception file-io syntax exception-handling

我想安全地关闭资源而不是传播异常。到目前为止,我想出了两个解决方案。

解决方案1 ​​

FileObject sourceDir = null;
FileObject targetDir = null;
BufferedWriter bw = null;
BufferedReader br = null;

try {
    // R/W operation with files
} finally {
    // close sourceDir, targetDir, br, bw
}

解决方案2

FileObject sourceDir = null;
FileObject targetDir = null;
BufferedWriter bw = null;
BufferedReader br = null;

try {
    // R/W operation with files
} catch (IOException e) {
    throw e;
} finally {
    // close sourceDir, targetDir, br, bw
}

我不喜欢第二个解决方案中的throw e,但try-finally对我来说似乎有点不寻常,所以我不确定应该使用哪一个。或者有更好的方法可以做到吗?

2 个答案:

答案 0 :(得分:2)

如果要记录异常和/或将其包装在运行时异常中并抛出它,则第二个解决方案可能很有用。

答案 1 :(得分:1)

选项1完全正确。 try ... finally通常用于此。

您甚至可以将return放入try块中,Java将处理您的finally并返回。