一、引入
Commons-io
是 apache开源基金组织
提供的一组有关IO操作的开源工具包。
很多课程中会将 Commons-io
说成 框架
,这个说法是有问题的,因为它还达不到框架的级别,它只是一个工具包而已。
apache
是一个专门为支持开源软件项目而办的一个非盈利性组织。
这个组织成立于 1999年
,总部设于美国马里兰州。
这个组织有很多很多项目,现在在世界各地被广泛的使用,这些开源的项目为Java的快速发展提供了不可磨灭的贡献。
例如有我们后面学习的 Web应用服务器tomcat
、项目管理工具maven
、Java的安全框架shiro
、分布式框架Dubbo
、消息中间件ACTIVEMQ、RocketMQ
、大数据的消息中间件kafka
、分布式中做配置中心的zookeeper
、大数据的分析平台Apache Pig
、大数据开发的三大框架hadoop/spark/flink
、分步搜索lucene,但是它现在已经被es所替代了
、还有我们现在所学习的commons
。
Commons是apache开源基金组织提供的工具包,里面有很多帮助我们提高开发效率的API。
比如:
StringUtils 字符串工具类
NumberUtils 数字工具类
ArrayUtils 数组工具类
RandomUtils 随机数工具类
DateUtils 日期工具类
StopWatch 秒表工具类
ClassUtils 反射工具类
SystemUtils 系统工具类
MapUtils 集合工具类
Beanutils bean工具类
Commons-io io的工具类
等等…
其中:Commons-io是apache开源基金组织提供的一组有关IO操作的开源工具包。
作用:提高IO流的开发效率。
二、使用
由于 commons-io
不是我们自己写的,也不是Java提供的,而是第三方组织 apache
提供的。
第三方组织会将写好的代码打包成一个压缩包交给你,只不过在Java中压缩包的后缀是 jar
,所以我们也把它叫做 jar包
。
在 jar包
中其实就是别人写好的各种各样的类,如果你想要使用这些类中的方法,是不能直接用的,而是需要先将别人的代码导入到我们自己的项目中。
但是在以后我们会用到很多很多别人写好的代码,因此在正式使用的第一步是:在项目中新建一个文件夹:lib,这个文件夹以后去专门存放第三方jar包。
使用方式:
1,在项目中新建一个文件夹:lib
2,将jar包复制粘贴到lib文件夹
3,右键点击jar包,选择Add As a Library,表示将jar包跟我们的项目关联在一起了
4,在类中导包使用
它里面已经写好的方法有很多很多,但是有前面的的 IO流
做基础,这些方法很简单,看它的名字基本上也能猜出它的作用了。
并且你也能猜出它底层是怎么写代码的。
首先我们来说第一个相对来说比较常用的类 FileUtils
。
第一个单词 File
表示 文件 / 文件夹的路径
,Utils
表示 工具
,因此这个类里面的方法都是一些 文件/文件夹相关的方法
除了这个类外,还有 IOUtils类
,也是比较常见的。这个类里面大多是跟流相关的方法。
它也有拷贝,只不过在拷贝的时候传的就不是 File
了,而是 IO流
。
在以后,commons-io
淘汰了,它也会出现其他的替代品,但是只要基础扎实了,这些替代品学起来也是非常简单的。
三、代码示例
1)在项目中新建一个文件夹:lib
新建一个文件夹,文件夹的名字就叫做 lib
(library),这就表示以后,我们所用的所有第三方jar包,都会拷贝到这个文件夹中,方便管理。
![image-20240505105927657](https://img-blog.csdnimg.cn/img_convert/81d2edf615c1ab08003ede0d46fa95fc.png)
来看一下资料中提供的 jar包
。
commons-io-2.11.0-javadoc
:commons-io
后面有javadoc
,那就表示在这个jar包中,都是一些文档commons-io-2.11.0-sources
:sources
即源代码,因此在这个jar包中装的就是源代码commons-io-2.11.0-tests
:test
,即用来做测试的commons-io-2.11.0-test-sources
:用来做测试的源代码
因此上面四个都不是我想要的,我真正想要的、要导到当前项目中的,应该是第一个 commons-io-2.11.0
(后面是它的版本号)
![image-20240505110120129](https://img-blog.csdnimg.cn/img_convert/05bfbfffa2eabb00aa1b36b7af7cb9c4.png)
因此选中第一个 ctrl + C,回到代码中,点击 lib
ctrl + V 直接粘贴进去就行了。
![image-20240505110531935](https://img-blog.csdnimg.cn/img_convert/209fca68f910fc41bfe066f02e2cda4d.png)
但是光粘贴过来还不行,还需要让项目跟 jar包
两者间产生关联。
最后一步:右键点击 commons-io-2.11.0.jar
,选择 Add as Library...
,然后点击 OK
即可
![image-20240505110940187](https://img-blog.csdnimg.cn/img_convert/2c8ec2991bdccd2be9b4c7d03978deaf.png)
![image-20240505111000285](https://img-blog.csdnimg.cn/img_convert/79fff56d67cdacf16ec84e0897410073.png)
一旦关联成功后,在jar包的左边会有一个这样的箭头
![image-20240505111045973](https://img-blog.csdnimg.cn/img_convert/9cb7a410738a57a99a3a6c0c147bdf48.png)
双击打开,是可以将jar包展开,看见里面的内容。这就表示你的jar包导入成功。
![image-20240505111125904](https://img-blog.csdnimg.cn/img_convert/f2f39af05006a4b22eed9827df2d5e34.png)
2)将jar包复制粘贴到lib文件夹
一旦导入成功之后,我就可以开始使用里面的方法了。
在书写的时候要注意导入的包
![image-20240505111507736](https://img-blog.csdnimg.cn/img_convert/4db0061707065071cedbca4f7247ff2f.png)
由于下面的方法都是静态的,因此可以直接使用类名调用。
//一定不要导错包
import org.apache.commons.io.FileUtils;
/*
FileUtils类
static void copyFile(File srcFile, File destFile) 复制文件
static void copyDirectory(File srcDir, File destDir) 复制文件夹,直接拷贝文件夹里面的内容,拷贝后点进去,里面就是srcDir里面的东西。
static void copyDirectoryToDirectory(File srcDir, File destDir) 复制文件夹,将数据源文件夹原封不动的拷贝到目的地文件夹里面,点进去后,会先看到srcDir目录,然后再看到srcDir目录里面的东西。
static void deleteDirectory(File directory) 删除文件夹,文件夹本身也被删掉了
static void cleanDirectory(File directory) 清空文件夹,文件夹里面的东西没有了,但是文件夹本身还在
static String readFileToString(File file, Charset encoding) 读取文件中的数据变成成字符串
static void write(File file, CharSequence data, String encoding) 写出数据
IOUtils类
public static int copy(InputStream input, OutputStream output) 复制文件
public static int copyLarge(Reader input, Writer output) 复制大文件
public static String readLines(Reader input) 读取数据
public static void write(String data, OutputStream output) 写出数据
*/
File src = new File("myio\\a.txt");
File dest = new File("myio\\copy.txt");
FileUtils.copyFile(src, dest);
File src = new File("D:\\aaa");
File dest = new File("D:\\bbb");
FileUtils.copyDirectoryToDirectory(src, dest);
File src = new File("D:\\bbb");
FileUtils.cleanDirectory(src);