在Java中使用Reader和Stream时,让我感到困扰的一件事情是close()
方法可能会引发异常。由于把close方法放在finally块中是一个好习惯,这就需要我们处理一些尴尬的情况。我通常会使用以下代码:
FileReader fr = new FileReader("SomeFile.txt");
try {
try {
fr.read();
} finally {
fr.close();
}
} catch(Exception e) {
// Do exception handling
}
但我也看到过这种结构:
FileReader fr = new FileReader("SomeFile.txt");
try {
fr.read()
} catch (Exception e) {
// Do exception handling
} finally {
try {
fr.close();
} catch (Exception e) {
// Do exception handling
}
}
我更喜欢第一种结构,因为只有一个catch块,看起来更优雅。是否确实有理由偏爱第二种或其他结构?
更新:如果我指出read和close都只会抛出IOException,是否会有所不同?因此,如果读取失败,则关闭也可能因相同的原因而失败。