资讯专栏INFORMATION COLUMN

Java关于IO的一个小工具

Steven / 2898人阅读

摘要:我们可以设计一个工具类,如下那么,在代码块中就可以这样写这些代码都可以省略只需要下面这一行代码就可以了是不是方便了很多呢这个工具类用到了可变参数,接口隔离的思想。

考虑这样一种场景,你要为系统编写一个下载文件并缓存到本地的功能,你会用到InputSteam和OutputStream类,你可能会这么写:

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行代码,假如每次用到IO的时候都写一大堆if……else,也挺烦的,有没有什么办法可以用一行代码就搞定呢?查看InputStream和OutputStream抽象类源代码,发现他们都实现了共同的接口Closeable,事实上,java中所有Stream类都必须实现这个接口,那么,这下就好办了。
我们可以设计一个工具类,如下:

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);
}

是不是方便了很多呢?这个工具类用到了可变参数,接口隔离的思想。这样写代码,不仅仅只是方便而已,代码的可读性也好了很多,不是吗?

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/73068.html

相关文章

  • 大前端- 收藏集 - 掘金

    摘要:下面围绕的这样的目的,即左右知乎网页上屏幕截图功能的实现前端掘金背景最近注意到知乎的屏幕截图反馈功能,感觉非常不错。正如你期望的,文中的闯关记之垃圾回收和内存管理前端掘金题图来源,授权基于协议。 微信小程序实战学习 起手式 DEMO 仿肯德基 - 前端 - 掘金小程序?大场景? 微信小程序本质上来说就是一个 HTML 5(移动网页) 应用,用view、scoll-view代替了div标...

    LdhAndroid 评论0 收藏0
  • Jodd - Java瑞士军刀轻量级工具包!

    摘要:介绍是对于开发更便捷的开源迷你框架,包含工具类实用功能的集合,总包体积不到。你可以把想象成的瑞士军刀不仅小,锋利而且包含许多便利的功能。 showImg(https://segmentfault.com/img/remote/1460000015356940); Jodd介绍 Jodd是对于Java开发更便捷的开源迷你框架,包含工具类、实用功能的集合,总包体积不到1.7M。 Jodd构...

    yck 评论0 收藏0
  • Maven本地缓存清理工具

    摘要:有个时候多人多协作开发过程中,会存在临时修改的二方包,同样版本需要重新拉取的情况。发现大部分人包括自己长久以来也是采用最原始的方法,一层层找到对应的目录删除对应的文件。某天实在是受不了了,写了个小工具分享下,小代码解决小问题。 有个时候多人多team协作开发过程中,会存在临时修改的二方包,同样版本需要重新拉取的情况。发现大部分人包括自己长久以来也是采用最原始的方法,一层层找到对应的目录...

    JaysonWang 评论0 收藏0
  • 项目】全栈开发培训手册 | 后端(1) vert.x框架理解

    摘要:二来,给大家新开坑的项目一个参考。因此,本系列以主要以官方文档为基础,将尽可能多的特性融入本项目,并标注官网原文出处,有兴趣的小伙伴可点击深入了解。可以通过一些特殊协议例如将消息作为统一消息服务导出。下载完成后自行修改和。 开坑前言 我给这个专栏的名气取名叫做小项目,听名字就知道,这个专题最终的目的是带领大家完成一个项目。为什么要开这么大一个坑呢,一来,虽然网上讲IT知识点的书籍铺天盖...

    hightopo 评论0 收藏0
  • 后台 - 收藏集 - 掘金

    摘要:探究系统登录验证码的实现后端掘金验证码生成类手把手教程后端博客系统第一章掘金转眼间时间就从月份到现在的十一月份了。提供了与标准不同的工作方式我的后端书架后端掘金我的后端书架月前本书架主要针对后端开发与架构。 Spring Boot干货系列总纲 | 掘金技术征文 - 掘金原本地址:Spring Boot干货系列总纲博客地址:http://tengj.top/ 前言 博主16年认识Spin...

    CrazyCodes 评论0 收藏0

发表评论

0条评论

Steven

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<