前言:

    文件类操作场景,我想大家应该很熟悉,内容写文件、保存文件、拷贝文件、移动文件、删除文件.....等等等等,虽说java.io包提供了文件和流的基础类库,能够支持我们实现所有的文件操作,但是毕竟是基础类库,意味着我们需要自己在此基础上进行相应的封装已满足特定的需求场景,那么一个最熟悉的声音"有没有现成的比较好的工具类已完成此项工作,我们拿来即用呢?",答案是肯定的,下面就带大家认识一下Apache下一个优秀的io封装类库,相信你若用到,定爱不释手!


开发环境:

1、添加依赖

这里默认我们已使用的maven项目,否则的话请自行下载依赖相关的java包也一样,项目引入以下依赖:



    commons-io
    commons-io
    2.6

2、api演示

该类库里面关于文件的操作我们主要用到org.apache.commons.io.FileUtils类,其中常用的文件或文件夹的操作这里分为5大类:

  • write系列:各种各样的写文件

一文搞定所有文件类操作业务场景_第1张图片

  • read系列:各种各样的读文件

一文搞定所有文件类操作业务场景_第2张图片

  • copy系列:顾名思义为文件或文件夹的拷贝。

一文搞定所有文件类操作业务场景_第3张图片

  • move系列:文件或文件夹的移动。

image.png

  • force系列:文件或文件夹的创建与删除。

image.png

当然除了这几类常用的api之外该工具类还有些许其它方法,如果有了使用需求,可以先瞄一眼。


3、场景使用举例

需求场景一:第三方业务系统上报一类业务数据,其中某个字段如header为用户头像,但是该字段传递的值可能是互联网可访问url,也可能是内网环境传递上来的图片base64,现要求将上报上来用户数据的头像图片保存到本地文件系统。

分析:由于图片数据有两类,(1)、可访问url  (2)、base64字符串,针对url肯定是直接下载保存保存本地,针对base64则只能解码为图片字节再存储本地。

实现:这里只处理核心业务块如下:

一文搞定所有文件类操作业务场景_第4张图片


需求场景二:数据库有一份住户数据,我们需要取出每条记录中的若干字段到本地进行逐条包装处理,这个取出的数据是线上数据库,本地程序不能直连,只以我们写好的sql语句导出到txt文件中给到我们,我们拿到txt文件,要读取到对应实体模型中处理。

分析:首先把数据库的每条数据也就是文件里面的每行数据读取出来,使用tab符分割每行数据拿到每个字段值即可,这里的讲解的重点不是读取到模型之后如何处理,恰好是如何把txt中每条记录独占一行,字段之间以tab符分割的数据读取到模型中。

实现:当然java的BufferedReader来包装FileReader来包装File,然后使用其readLine()方法逐行读取是可以的一文搞定所有文件类操作业务场景_第5张图片

但是有没有更简洁,更干净的方式处理呢(不要固执的说,即使你用最简洁的api来做,它的底层一样逃不过如上的几个步骤,我们这里不讨论底层如何实现,我们讨论的是如何站在巨人的肩膀上搬砖,否则,你回家坐车最终也是你再那条路上走了十万八千里,没有逃过每一米路面,何不你自己跑回家呢,还能省点钱,更环保绿色的出行方式...),那么我们就来看看今天介绍的工具类是如何处理的:image.png

看吧,一行代码就把你需要的我文件读取成为最方便的数据结构去了。


通过两个小小的例子可以看出来,这个工具类库是如何简介强大了吧,有需要的小伙伴儿们,赶快试试吧,如果觉得好用,不妨帮我点个赞,鼓励鼓励我在分享的路上永不止步哦...!