java 文件流关闭 finally,java试试finally块关闭流

I want to close my stream in the finally block, but it throws an IOException so it seems like I have to nest another try block in my finally block in order to close the stream. Is that the right way to do it? It seems a bit clunky.

Here's the code:

public void read() {

try {

r = new BufferedReader(new InputStreamReader(address.openStream()));

String inLine;

while ((inLine = r.readLine()) != null) {

System.out.println(inLine);

}

} catch (IOException readException) {

readException.printStackTrace();

} finally {

try {

if (r!=null) r.close();

} catch (Exception e){

e.printStackTrace();

}

}

}

解决方案

It seems a bit clunky.

It is. At least java7's try with resources fixes that.

Pre java7 you can make a closeStream function that swallows it:

public void closeStream(Closeable s){

try{

if(s!=null)s.close();

}catch(IOException e){

//Log or rethrow as unchecked (like RuntimException) ;)

}

}

Or put the try...finally inside the try catch:

try{

BufferedReader r = new BufferedReader(new InputStreamReader(address.openStream()));

try{

String inLine;

while ((inLine = r.readLine()) != null) {

System.out.println(inLine);

}

}finally{

r.close();

}

}catch(IOException e){

e.printStackTrace();

}

It's more verbose and an exception in the finally will hide one in the try but it's semantically closer to the try-with-resources introduced in Java 7.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值