try {
FileReader fr = new FileReader(file);
BufferedReader br = new BufferedReader(fr);
String line = null;
} catch (FileNotFoundException fnf) {
fnf.printStackTrace();
} finally {
fr.close();
}
fr.close()
显示错误:
fr无法解决
我读过在finally块中关闭文件是一个很好的做法 那是做错了什么?
答案 0 :(得分:22)
变量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();
}
}
}
这是一种非常常见的代码模式,因此在将来的类似情况下记住它是件好事。
考虑从此方法中抛出IOException
- 打印跟踪跟踪对调用者没有多大帮助,和您不需要嵌套的try catch fr.close()
答案 1 :(得分:7)
现在终于不需要阻止,
try (FileReader fr = new FileReader(file);
BufferedReader br = new BufferedReader(fr);){
String line = null;
}
} catch(FileNotFoundException fnf) {
fnf.printStackTrace();
}
现在自动关闭您的读者
答案 2 :(得分:0)
您的示波器存在问题。如果你真的想使用这种语法,你应该像这样解决它:
FileReader fr = null;
try {
fr = new FileReader(file);
BufferedReader br = new BufferedReader(fr);
String line = null;
} catch (FileNotFoundException fnf) {
fnf.printStackTrace();
} finally {
if( fr != null)
fr.close();
}
这样,fr将存在于finally块的范围内。