noM*_*MAD 12 java try-catch-finally
try {
FileReader fr = new FileReader(file);
BufferedReader br = new BufferedReader(fr);
String line = null;
} catch (FileNotFoundException fnf) {
fnf.printStackTrace();
} finally {
fr.close();
}
Run Code Online (Sandbox Code Playgroud)
将fr.close()显示一个错误:
fr无法解决
我曾经读过在finally块中关闭一个文件是一个很好的做法.
那是做错了什么的?
Boh*_*ian 25
该变量fr仅在try块内具有范围.它超出了finally块的范围.您需要在块之前声明它try:
FileReader fr = null;
try {
fr = new FileReader(file);
BufferedReader br = new BufferedReader(fr);
String line = null;
} catch (FileNotFoundException e) {
e.printStackTrace();
} finally {
if (fr != null) {
try {
fr.close();
} catch (IOException e) {
// This is unrecoverable. Just report it and move on
e.printStackTrace();
}
}
}
Run Code Online (Sandbox Code Playgroud)
这是一种非常常见的代码模式,因此在将来的类似情况下记住它是件好事.
考虑抛出IOException此方法-打印的轨道痕迹是不是呼叫者非常有帮助,而且你不需要绕嵌套的尝试捕捉fr.close()
现在终于不需要块了,
try (FileReader fr = new FileReader(file);
BufferedReader br = new BufferedReader(fr);){
String line = null;
}
} catch(FileNotFoundException fnf) {
fnf.printStackTrace();
}
Run Code Online (Sandbox Code Playgroud)
现在自动关闭你的读者
| 归档时间: |
|
| 查看次数: |
16391 次 |
| 最近记录: |