Java IO流的一个小工具
2016-06-23 20:53
513 查看
考虑这样一种场景,你要为系统编写一个下载文件并缓存到本地的功能,你会用到InputSteam和OutputStream类,你可能会这么写:
在finally代码块中,为了关闭两个IO流写了14行代码,有没有什么办法可以用一行代码就搞定呢?查看InputStream和OutputStream抽象类源代码,发现他们都实现了共同的接口Closeable,事实上,java中所有流都必须实现这个接口,那么,这下就好办了。
我们可以设计一个工具类,如下:
那么,在finally代码块中就可以这样写:
是不是方便了很多呢?这个工具类用到了可变参数,接口隔离的思想。这样写代码,不仅仅只是方便而已,代码的可读性也好了很多,不是吗?
InputStream is = null; OutputStream os = null; try { is = new FileInputStream(""); os = new FileOutputStream(""); //下载文件 //保存到本地 } catch (FileNotFoundException e) { e.printStackTrace(); } finally { if (is != null) { try { is.close(); } catch (IOException e) { e.printStackTrace(); } } if (os != null) { try { os.close(); } catch (IOException e) { e.printStackTrace(); } } }
在finally代码块中,为了关闭两个IO流写了14行代码,有没有什么办法可以用一行代码就搞定呢?查看InputStream和OutputStream抽象类源代码,发现他们都实现了共同的接口Closeable,事实上,java中所有流都必须实现这个接口,那么,这下就好办了。
我们可以设计一个工具类,如下:
public class IOUtil { public static void close(Closeable... closeableList) { try { for (Closeable closeable : closeableList) { if (closeable != null){ closeable.close(); } } } catch (IOException e) { e.printStackTrace(); } } }
那么,在finally代码块中就可以这样写:
finally{ // if (is != null) { // try { // is.close(); // } catch (IOException e) { // e.printStackTrace(); // } // } // if (os != null) { // try { // os.close(); // } catch (IOException e) { // e.printStackTrace(); // } // } IOUtil.close(is, os); }
是不是方便了很多呢?这个工具类用到了可变参数,接口隔离的思想。这样写代码,不仅仅只是方便而已,代码的可读性也好了很多,不是吗?
相关文章推荐
- Java 4种方法实现选择排序算法
- myeclipse10运用git过程
- 【SpringMVC学习07】SpringMVC中的统一异常处理
- SpringMvc Dao jdbcTemplate设置不自动提交(手动提交)(适用商品抢购等事务)
- springMVC注解
- 专业PHP 7 IDE - Eclipse PDT 4.0 终于出世
- java基础第十三天IO接口
- java web 开发组件 vs 框架spring大总结
- java图形处理-Java Graphics2D
- java web 简单的分页显示
- java axis调用带有soap头(soapheader)的.net webservice
- 使用 JAVA 数组
- Java包装类
- Random类
- Java中静态关键字的使用方法介绍二
- NumberFormat类
- Spring的两种事务定义方式
- ZOJ 3498 L - Javabeans
- ubuntu下eclipse的自动补全功能不能用
- Android中eclipse开虚拟机的问题