java关闭流,静态检查一直不过如何改?

牧之~ 2017-01-05 07:29:00

。。。
printout.close();
printout = null;

out.close();
out = null;

input.close();
input = null;
}
catch (MalformedURLException e)
{
e.printStackTrace();
}
catch (IOException e)
{
e.printStackTrace();
}
finally
{
try
{
if (null != printout)
{
printout.close();
printout = null;
}
if (null != out)
{
out.close();
out = null;
}
if (null != input)
{
input.close();
input = null;
}
}
catch (IOException e)
{
e.printStackTrace();
}
}

正常代码有关闭流,try到问题后在finally里又有判断关闭,然后还是报可能没关闭,最好在finally里关闭,我怀疑finally里又try catch了,报的错想让再写finally,这么一搞不就无穷无尽了?
...全文
199 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
小灰狼 2017-01-10
  • 打赏
  • 举报
回复


public class DisposeUtil {
    public static void safeClose(java.io.Closeable obj){
        if(obj == null)
            return;
        try{
            obj.close();
        }catch(Throwable e){}
    }
}

try{
    ......
}finally{
    DisposeUtil.safeClose(printout);
    DisposeUtil.safeClose(out);
    DisposeUtil.safeClose(input);
}
bigbaldy 2017-01-06
  • 打赏
  • 举报
回复
引用 2 楼 flyfeifei66 的回复:
[quote=引用 1 楼 m2200 的回复:] 如果finally里面关闭流报错了,那么就是out本身出错了,那么你再try catch finally关闭流,结果也是一样,因为out本身没有改变,所以这时候只要catch异常,终止程序运行就行了,也没什么好的办法。
findbugs报了个低危的问题[/quote] findbugs不如fortify好用,你说的这个明显误报,你要不想让他报,换try-with-resources试试
牧之~ 2017-01-05
  • 打赏
  • 举报
回复
引用 1 楼 m2200 的回复:
如果finally里面关闭流报错了,那么就是out本身出错了,那么你再try catch finally关闭流,结果也是一样,因为out本身没有改变,所以这时候只要catch异常,终止程序运行就行了,也没什么好的办法。
findbugs报了个低危的问题
爱睡觉的阿狸 2017-01-05
  • 打赏
  • 举报
回复
如果finally里面关闭流报错了,那么就是out本身出错了,那么你再try catch finally关闭流,结果也是一样,因为out本身没有改变,所以这时候只要catch异常,终止程序运行就行了,也没什么好的办法。

62,625

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧