错误案例
常见的一种写法,针对每个catch都进行一次io流关闭。在关闭过程也未进行io流的空值判断。
try{ URL url = new URL("http://pm.china.alibaba.com/" + memberId); URLConnection conn = url.openConnection(); reader.close(); } catch (MalformedURLException e) { } catch (IOException e) { try { reader.close(); } catch (IOException e1) { } }
错误分析
使用catch异常的方式关闭io流,需要注意catch的分支必须得写全,而且需要针对空值,流关闭异常进行处理,导致代码不是很优雅。 也很容易造成io流没有正常关闭,出现open too many files的情况。
正确用法
1. 在finnally 中关闭io流,避免catch分支的遗漏 2. 使用一些utils关闭io流
try{ URL url = new URL("http://pm.china.alibaba.com/); URLConnection conn = url.openConnection(); } catch (Exception e) { // do log xxxx } finally { Ioutils.closeQuietly(reader) }