BufferedReader in
= new BufferedReader(new FileReader(file));
try {
while((thisLine=in.readLine())!=null){
...
}
} catch (IOException e) {
//in.close();
// TODO Auto-generated catch block
e.printStackTrace();
}
在上面的代码中,我想关闭catch块中的读缓冲区。但是我发现函数in.close也会抛出IOException。如果我在catch块中嵌套另一个try-catch块,那看起来很难看。那么,处理这样一个问题的正确方法是什么?
答案 0 :(得分:2)
您可以使用finally
块。 finally-block
每次都被执行,除非jvm异常退出。
Java 7 try-with-resources
语句要自动关闭,您需要明确关闭资源流,
try-with-resources语句是一个声明一个的try语句 或更多资源。资源是必须在之后关闭的对象 程序完成了。 try-with-resources语句 确保在语句结束时关闭每个资源。任何 实现java.lang.AutoCloseable的对象,包括all 实现java.io.Closeable的对象可以用作资源。
示例 -
try(BufferedReader in
= new BufferedReader(new FileReader(file))){
while((thisLine=in.readLine())!=null){
...
}
}catch (IOException e) {
...
}
答案 1 :(得分:1)
关闭finally
块中的资源,而不是catch
块中的资源。
try
{
// actual code.
}
catch (IOException e) {
// handle exception
}
finally
{
try
{
in.close();
}
catch (IOException e) {
// handle exception
}
}
答案 2 :(得分:1)
在finally block中进行,这是专门用于清理的。
来自finally块文档
运行时系统总是执行finally块中的语句,而不管try块中发生了什么。所以这是进行清理的最佳场所。
BufferedReader in
= new BufferedReader(new FileReader(file));
try {
while((thisLine=in.readLine())!=null){
...
}
} catch (IOException e) {
//in.close();
// TODO Auto-generated catch block
e.printStackTrace();
}finally {
in.close
}
答案 3 :(得分:0)
try {
in = new BufferedReader(new FileReader(file));
// stuff here
} finally {
try {
in.close()
} catch (IOException e) {} // ignore
}