Apache Commons IO简介
Apache Commons IO是对java.io的扩展,主要是对Java中的bio封装了一些好用的工具类,nio涉及的较少,关于bio和nio问题我们后续再聊。
Commons IO目前最新版本是2.11.0,最低要求Java8以上。
以下为整体结构:
- io - 此包定义了用于处理流、读取器、写入器和文件的实用程序类。
- comparator - 此软件包为文件提供了各种比较器实现。
- file - 此软件包在 java.nio.file 领域提供扩展。
- filefilter - 此包定义了一个接口 (IOFileFilter),该接口结合了 FileFilter 和 FilenameFilter。
- function - 此包为 lambda 表达式和方法引用定义仅 IO 相关函数接口。
- input - 此包提供输入类的实现,例如 InputStream 和 Reader。
- input.buffer - 此包提供缓冲输入类的实现,例如 CircularBufferInputStream 和 PeekableInputStream。
- monitor - 此包提供用于监控文件系统事件(目录和文件创建、更新和删除事件)的组件。
- output - 此包提供输出类的实现,例如输出流和编写器。
- serialization - 此包提供用于控制类反序列化的框架。
maven坐标
1 |
|
下面只列举其中常用的加以说明,其余感兴趣的可以自行翻阅源码研究。
IOUtils
IOUtils可以说是Commons IO中最常用的了,下面直接看例子。
关闭流
1 |
|
读取流
1 |
|
其他
1 |
|
文件相关
文件相关主要有FileUtils:文件工具类,FilenameUtils:文件名工具类,PathUtils:路径工具类(主要是操作JDK7新增的java.nio.file.Path类)
文件读写
1 |
|
移动和复制
1 |
|
其他文件操作
1 |
|
文件名称相关
1 |
|
JDK7的Path操作
1 |
|
流相关
org.apache.commons.io.input和org.apache.commons.io.output包下有许多好用的过滤流,下面列举几个做下说明
自动关闭的输入流 AutoCloseInputStream
1 |
|
倒序文件读取 ReversedLinesFileReader
1 |
|
带计数功能的流 CountingInputStream,CountingOutputStream
1 |
|
可观察的输入流 ObservableInputStream
可观察的输入流(典型的观察者模式),可实现边读取边处理
比如将某些字节替换为另一个字节,计算md5摘要等
当然你也可以完全写到文件后在做处理,这样相当于做了两次遍历,性能较差。
这是一个基类,使用时需要继承它来扩展自己的流,示例如下:
1 |
|
其他
- BOMInputStream: 同时读取文本文件的bom头
- BoundedInputStream:有界的流,控制只允许读取前x个字节
- BrokenInputStream: 一个错误流,永远抛出IOException
- CharSequenceInputStream: 支持StringBuilder,StringBuffer等读取
- LockableFileWriter: 带锁的Writer,同一个文件同时只允许一个流写入,多余的写入操作会跑出IOException
- StringBuilderWriter: StringBuilder的Writer
… …
文件比较器
org.apache.commons.io.compare包有很多现成的文件比较器,可以对文件排序的时候直接拿来用。
- DefaultFileComparator:默认文件比较器,直接使用File的compare方法。(文件集合排序( Collections.sort() )时传此比较器和不传效果一样)
- DirectoryFileComparator:目录排在文件之前
- ExtensionFileComparator:扩展名比较器,按照文件的扩展名的ascii顺序排序,无扩展名的始终排在前面
- LastModifiedFileComparator:按照文件的最后修改时间排序
- NameFileComparator:按照文件名称排序
- PathFileComparator:按照路径排序,父目录优先排在前面
- SizeFileComparator:按照文件大小排序,小文件排在前面(目录会计算其总大小)
- CompositeFileComparator:组合排序,将以上排序规则组合在一起
使用示例如下:
1 |
|
文件监视器
org.apache.commons.io.monitor包主要提供对文件的创建、修改、删除的监听操作,下面直接看简单示例。
1 |
|
总结
除了以上介绍的工具类外,还有其他不是很常用的就不多做介绍了。感兴趣的可以自行翻阅源码研究。