Java文件处理效率库Commons-IO(速览)

Java文件处理效率库Commons-IO(速览)

一、工具介绍

Commons是apache开源基金组织提供的工具包,里面有很多帮助我们提高开发效率的API。比如:

复制代码
StringUtils   字符串工具类 NumberUtils   数字工具类 ArrayUtils   数组工具类 RandomUtils   随机数工具类 DateUtils   日期工具类 StopWatch   秒表工具类 ClassUtils   反射工具类 SystemUtils   系统工具类 MapUtils   集合工具类 Beanutils   bean工具类 Commons-io io的工具类

其中:Commons-io是apache开源基金组织提供的一组有关IO操作的开源工具包。作用:提高IO流的开发效率

二、使用方式

lib方式引入

1、新建lib文件夹

2、把第三方jar包粘贴到文件夹中

3、右键点击add as a library

代码示例:

复制代码
public class CommonsIODemo1 { public static void main (String[] args) throws IOException { /* FileUtils类 static void copyFile(File srcFile, File destFile)                   复制文件 static void copyDirectory(File srcDir, File destDir)                复制文件夹 static void copyDirectoryToDirectory(File srcDir, File destDir)     复制文件夹 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);*/ } }

maven方式引入

复制代码
<dependency> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> <version>${commons-io.version}</version> </dependency>

三、常用核心工具类概览

工具类名 主要功能说明
IOUtils 流(InputStream/OutputStream/Reader/Writer)操作工具,如复制、读取、关闭等
FileUtils 文件和目录级别的操作,如复制、移动、删除、读写等
FilenameUtils 文件名和路径字符串的解析与处理(不涉及实际文件系统)
FileFilterUtils 提供多种文件过滤器(FileFilter),用于 筛选 符合条件的文件
FileSystemUtils 获取文件系统的相关信息(如 磁盘 空间)
LineIterator 逐行读取文件内容的迭代器工具
FileDeleteStrategy 提供更灵活的文件删除策略
EndianUtils 字节序转换工具(适用于处理二进制数据)
Charsets 提供标准字符集常量(如 UTF_8)
CopyStreamException / CopyStreamListener / CopyStreamEvent 支持带 进度监听 的流复制

四、IOUtils(数据相关)

拷贝方法

方法 作用描述 操作对象
copy(InputStream input, OutputStream output) 将输入流复制到输出流(默认缓冲区) InputStream → OutputStream
copy(InputStream input, OutputStream output, int bufferSize) 带指定缓冲区大小的复制 InputStream → OutputStream
copy(InputStream input, Writer output, String inputEncoding) 输入流转为字符写入Writer(需编码) InputStream → Writer
copy(Reader input, Writer output) Reader内容复制到Writer Reader → Writer
copy(Reader input, OutputStream output, String outputEncoding) Reader写入OutputStream(需编码) Reader → OutputStream

copyLarge 用于处理大文件或大数据流(如超过2GB)

方法 作用描述 操作对象
copyLarge(Reader input, Writer output) 使用4KB缓冲区复制大文本流 Reader → Writer
copyLarge(Reader input, Writer output, char[] buffer) 自定义缓冲区复制大文本流 Reader → Writer

输入流转字符串/字节数组

方法 作用描述 操作对象
toString(Reader input) 读取整个Reader为字符串 Reader
toString(byte[] input, String encoding) 字节数组转字符串(指定编码) byte[]
toString(InputStream input, Charset encoding) 输入流转字符串 InputStream
toString(InputStream input, String encoding) 同上,使用字符串编码 InputStream
toString(URI uri, String encoding) URI资源内容转字符串 URI
toString(URL url, String encoding) URL资源内容转字符串 URL
方法 作用描述 操作对象
toByteArray(InputStream input) 输入流转为字节数组 InputStream
toByteArray(InputStream input, int size) 指定大小读取为字节数组 InputStream
toByteArray(URI uri) URI资源内容转为字节数组 URI
toByteArray(URL url) URL资源内容转为字节数组 URL
toByteArray(URLConnection urlConn) 网络连接内容转为字节数组 URLConnection
toByteArray(Reader input, String encoding) Reader内容转为字节数组(需编码) Reader

行读写操作

方法 作用描述 操作对象
readLines(Reader input) 按行读取所有内容返回List Reader
readLines(InputStream input, Charset encoding) 按行读取返回List InputStream
readLines(InputStream input, String encoding) 同上,使用字符串编码 InputStream
方法 作用描述 操作对象
writeLines(Collection<?> lines, String lineEnding, Writer writer) 写入多行,指定换行符 Collection
writeLines(Collection<?> lines, String lineEnding, OutputStream output, Charset encoding) 写入多行并指定编码 Collection
writeLines(Collection<?> lines, String lineEnding, OutputStream output, String encoding) 同上,使用字符串编码 Collection

流读取操作

方法 作用描述 操作对象
read(InputStream input, byte[] buffer) 从流中读取数据到buffer InputStream
read(InputStream input, byte[] buffer, int offset, int length) 指定偏移和长度读取 InputStream
read(Reader input, char[] buffer) 从字符流读取到char数组 Reader
read(Reader input, char[] buffer, int offset, int length) 指定偏移和长度读取 Reader
方法 作用描述 操作对象
readFully(InputStream input, int length) 读取指定长度的数据,不足抛异常 InputStream
readFully(InputStream input, byte[] buffer) 完全填满buffer,否则抛异常 InputStream
readFully(InputStream input, byte[] buffer, int offset, int length) 指定范围填满buffer InputStream
readFully(Reader input, char[] buffer) 完全填满char数组 Reader
readFully(Reader input, char[] buffer, int offset, int length) 指定范围填满char数组 Reader

写入操作

方法 作用描述 操作对象
write(byte[] data, OutputStream output) 写入字节数组到输出流 OutputStream
write(byte[] data, Writer output, Charset encoding) 字节转字符写入Writer Writer
write(byte[] data, Writer output, String encoding) 同上,使用字符串编码 Writer
write(char[] data, Writer output) 写入字符数组到Writer Writer
write(char[] data, OutputStream output, Charset encoding) 转字节后写入输出流 OutputStream
write(char[] data, OutputStream output, String encoding) 同上,使用字符串编码 OutputStream
write(String data, Writer output) 写入字符串到Writer Writer
write(CharSequence data, Writer output) 写入任意CharSequence到Writer Writer

比较与跳过操作

方法 作用描述 操作对象
contentEquals(InputStream input1, InputStream input2) 比较两个流内容是否一致 InputStream
contentEquals(Reader input1, Reader input2) 比较两个字符流内容是否一致 Reader
contentEqualsIgnoreEOL(Reader input1, Reader input2) 忽略换行符进行比较 Reader
方法 作用描述 操作对象
skip(InputStream input, long toSkip) 跳过指定字节(可能不完全) InputStream
skip(Reader input, long toSkip) 跳过指定字符数(可能不完全) Reader
skipFully(InputStream input, long toSkip) 强制跳过指定字节,不足则抛异常 InputStream
skipFully(Reader input, long toSkip) 强制跳过指定字符数,不足则抛异常 Reader

其他辅助方法

方法 作用描述 操作对象
closeQuietly(Closeable closeable) 安静关闭Closeable对象(忽略异常) Closeable(如InputStream、OutputStream等)

五、FileUtils(文件/文件夹相关)

以下是 FileUtils 工具类中与文件和目录操作相关的常用方法,按功能分类整理,便于查阅使用。

复制操作

方法 作用描述 操作对象
copyDirectory(File srcDir, File destDir) 复制整个文件夹及其内容 文件夹
copyDirectory(File srcDir, File destDir, FileFilter filter) 带过滤器复制文件夹 文件夹
copyDirectoryToDirectory(File srcDir, File destDir) 将源文件夹作为子目录复制到目标文件夹 文件夹
copyFile(File srcFile, File destFile) 复制单个文件 文件
copyFile(File input, OutputStream output) 将文件内容复制到输出流 文件 → 流
copyFileToDirectory(File srcFile, File destDir) 将文件复制到指定目录下 文件 → 文件夹
copyInputStreamToFile(InputStream source, File destination) 将输入流写入目标文件 流 → 文件
copyURLToFile(URL source, File destination) 下载URL内容保存为文件 URL → 文件
copyURLToFile(URL source, File destination, int connectionTimeout, int readTimeout) 带超时控制的下载 URL → 文件

字符串写入

方法 作用描述 操作对象
writeStringToFile(File file, String data, String encoding) 写入字符串到文件 文件
writeStringToFile(File file, String data, String encoding, boolean append) 追加或覆盖写入 文件

字节数组写入

方法 作用描述 操作对象
writeByteArrayToFile(File file, byte[] data) 写入字节数组到文件 文件
writeByteArrayToFile(File file, byte[] data, boolean append) 追加写入 文件
writeByteArrayToFile(File file, byte[] data, int off, int len) 指定偏移量写入 文件
writeByteArrayToFile(File file, byte[] data, int off, int len, boolean append) 指定偏移量追加写入 文件

集合写入(多行文本)

方法 作用描述 参数说明
writeLines(File file, Collection<?> lines) 写入集合中的每项为一行 默认编码、换行符
writeLines(File file, Collection<?> lines, boolean append) 追加写入多行 默认编码、换行符
writeLines(File file, Collection<?> lines, String lineEnding) 自定义换行符 文件
writeLines(File file, Collection<?> lines, String lineEnding, boolean append) 自定义换行符并追加 文件
writeLines(File file, String encoding, Collection<?> lines) 指定编码写入 文件
writeLines(File file, String encoding, Collection<?> lines, boolean append) 指定编码并追加 文件
writeLines(File file, String encoding, Collection<?> lines, String lineEnding) 指定编码+换行符 文件
writeLines(File file, String encoding, Collection<?> lines, String lineEnding, boolean append) 全部自定义 文件

通用写入方法

方法 作用描述 操作对象
write(File file, CharSequence data, Charset encoding) 写入任意字符序列 文件
write(File file, CharSequence data, Charset encoding, boolean append) 追加写入 文件
write(File file, CharSequence data, String encoding) 使用字符串编码写入 文件
write(File file, CharSequence data, String encoding, boolean append) 指定编码并追加写入 文件

移动/重命名操作

方法 作用描述 操作对象
moveDirectory(File srcDir, File destDir) 移动整个文件夹及内容 文件夹
moveDirectoryToDirectory(File src, File destDir, boolean createDestDir) 将文件夹作为子目录移动 文件夹
moveFile(File srcFile, File destFile) 移动文件 文件
moveFileToDirectory(File srcFile, File destDir, boolean createDestDir) 将文件移动到指定目录 文件
moveToDirectory(File src, File destDir, boolean createDestDir) 移动文件或目录到指定目录 文件/文件夹

删除/清空操作

方法 作用描述 操作对象
deleteDirectory(File directory) 删除整个文件夹(包括内容) 文件夹
cleanDirectory(File directory) 清空文件夹内所有内容 文件夹
forceDelete(File file) 强制删除文件或目录(可能抛异常) 文件/文件夹
deleteQuietly(File file) 安静删除文件或目录(忽略异常) 文件/文件夹

创建操作

方法 作用描述 操作对象
forceMkdir(File directory) 创建多级目录 文件夹
forceMkdirParent(File file) 创建文件的父目录 文件

读取文件内容

方法 作用描述 返回类型
readFileToByteArray(File file) 读取文件为字节数组 byte[]
readFileToString(File file, Charset encoding) 读取文件为字符串 String
readFileToString(File file, String encoding) 同上,使用字符串编码 String
readLines(File file, Charset encoding) 按行读取为字符串列表 List
readLines(File file, String encoding) 同上,使用字符串编码 List

文件迭代

方法 作用描述 操作对象
iterateFiles(File directory, IOFileFilter fileFilter, IOFileFilter dirFilter) 遍历目录下的文件 文件夹
iterateFiles(File directory, String[] extensions, boolean recursive) 按扩展名递归遍历 文件夹
iterateFilesAndDirs(File directory, IOFileFilter fileFilter, IOFileFilter dirFilter) 遍历文件和目录 文件夹
lineIterator(File file) 行迭代器读取文件内容 文件
lineIterator(File file, String encoding) 指定编码行读取 文件
方法 作用描述 返回类型
listFiles(File directory, IOFileFilter fileFilter, IOFileFilter dirFilter) 列出目录下的文件 Collection
listFiles(File directory, String[] extensions, boolean recursive) 按扩展名列出文件 Collection
listFilesAndDirs(File directory, IOFileFilter fileFilter, IOFileFilter dirFilter) 列出文件和目录 Collection

时间比较

方法 作用描述 操作对象
isFileNewer(File file, Date date) 判断文件是否比某个时间新 文件
isFileNewer(File file, File reference) 比较两个文件修改时间 文件 vs 文件
isFileNewer(File file, long timeMillis) 判断文件是否比某毫秒时间新 文件
isFileOlder(File file, Date date) 判断文件是否比某个时间旧 文件
isFileOlder(File file, File reference) 比较两个文件修改时间 文件 vs 文件
isFileOlder(File file, long timeMillis) 判断文件是否比某毫秒时间旧 文件

其他实用方法

方法 作用描述 操作对象
isSymlink(File file) 判断是否是符号链接 文件
directoryContains(File directory, File child) 判断文件夹是否包含某文件/文件夹 文件夹
sizeOf(File file) 获取文件或文件夹大小 文件/文件夹
getTempDirectory() / getTempDirectoryPath() 获取系统临时目录 系统路径
getUserDirectory() / getUserDirectoryPath() 获取用户主目录 用户路径
touch(File file) 创建一个空文件(若不存在) 文件
contentEquals(File file1, File file2) 比较两个文件内容是否一致 文件 vs 文件

推荐:FileUtils 是处理文件和目录结构 的核心工具类。对于流级别 的操作,请使用 IOUtils。两者结合可以高效完成 I/O 和文件系统任务。

六、FilenameUtils(文件名/后缀名相关)

以下是 FilenameUtils 工具类中与文件名、路径、后缀名处理相关的常用方法,按功能分类整理,便于查阅使用。

路径拼接与拆分

方法 作用描述 示例
concat(String basePath, String fullFilenameToAdd) 拼接基础路径和文件名 concat("dir", "file.txt") ➜ "dir/file.txt"
getFullPath(String filename) 获取文件的完整目录部分 "dir/file.txt" ➜ "dir/"
getName(String filename) 获取文件名(含扩展名) "dir/file.txt" ➜ "file.txt"
getPath(String filename) 去除盘符后的路径部分 "C:/dir/file.txt" ➜ "dir"
getPrefix(String filename) 获取盘符或协议前缀 "C:/dir/file.txt" ➜ "C:"

文件名与扩展名操作

方法 作用描述 示例
getBaseName(String filename) 获取不带扩展名的文件名 "file.txt" ➜ "file"
getExtension(String filename) 获取文件扩展名 "file.txt" ➜ "txt"
removeExtension(String filename) 移除文件扩展名 "file.txt" ➜ "file"
indexOfExtension(String filename) 获取最后一个 . 的位置 "file.tar.gz" ➜ 9
indexOfLastSeparator(String filename) 获取最后一个路径分隔符位置 "dir/file.txt" ➜ 3
isExtension(String filename, String extension) 判断扩展名是否匹配指定值(支持集合、数组) "file.txt", "txt" ➜ true

路径格式转换

方法 作用描述 示例
normalize(String filename) 标准化路径为当前系统格式 "dir\file.txt" ➜ "dir/file.txt"
separatorsToSystem(String path) 转换所有分隔符为当前系统格式 "dir/file" ➜ Windows: "dir\file"
separatorsToUnix(String path) 转换为 Unix 风格路径 "dir\file" ➜ "dir/file"
separatorsToWindows(String path) 转换为 Windows 风格路径 "dir/file" ➜ "dir\file"

路径比较与判断

方法 作用描述 示例
equals(String filename1, String filename2) 判断两个路径是否相同(非格式化) "dir/file" vs "dir\file" ➜ false
equalsNormalized(String filename1, String filename2) 判断两个路径是否相同(格式化后) 同上 ➜ true
directoryContains(String canonicalParent, String canonicalChild) 判断父目录是否包含子路径 "dir" 包含 "dir/file.txt" ➜ true
wildcardMatch(String filename, String wildcardMatcher) 使用通配符匹配文件名 "file.txt" 匹配 "*.txt" ➜ true

提示:FilenameUtils 是用于字符串形式的路径和文件名操作的工具类,不涉及实际文件系统的读写。适合在进行路径解析、构造、标准化时使用,是构建健壮 I/O 逻辑的重要辅助工具。

除了上文的 IOUtilsFileUtilsFilenameUtils 之外,Apache Commons IO 还提供了多个实用且重要的工具类,用于简化 I/O 操作和文件处理。

七、核心工具类详解

FileFilterUtils

提供一系列用于过滤文件的 FileFilter 实现,可用于遍历目录时筛选特定文件

示例方法:

  • suffixFileFilter(String suffix):按后缀过滤
  • prefixFileFilter(String prefix):按前缀过滤
  • nameFileFilter(String name):按文件名精确匹配
  • and(FileFilter... filters):组合多个过滤条件
  • notFileFilter(IOFileFilter filter):取反过滤器

使用示例:

复制代码
File dir = new File ( "path/to/dir" ); File[] txtFiles = dir.listFiles(FileFilterUtils.suffixFileFilter( ".txt" ));

FileSystemUtils

获取文件系统信息,如磁盘使用情况

示例方法:

  • freeSpaceKb(String path):获取指定路径所在分区的剩余空间(KB)
  • freeSpaceKb(String path, int timeout):带超时控制的版本

使用示例:

复制代码
long freeSpace = FileSystemUtils.freeSpaceKb( "C:/" ); // Windows System.out.println( "Free space: " + freeSpace + " KB" );

LineIterator

逐行读取文件内容,支持自动关闭资源。

示例方法:

  • LineIterator iterator = FileUtils.lineIterator(file, "UTF-8")
  • while (iterator.hasNext()) { String line = iterator.nextLine(); }
  • LineIterator.closeQuietly(iterator)

FileDeleteStrategy

定义不同的删除策略,比如延迟删除、强制删除等。

示例方法:

  • FileDeleteStrategy.NORMAL.delete(file):正常删除
  • FileDeleteStrategy.FORCE.delete(file):强制删除(忽略只读属性)

EndianUtils

字节顺序转换工具,适用于处理二进制数据(如网络协议、文件格式解析)。

示例方法:

  • swapShort(short value):大小端转换 Short
  • swapInt(int value):大小端转换 Int
  • swapLong(long value):大小端转换 Long

Charsets

提供标准字符集常量,避免手动创建 Charset 对象。

示例常量:

  • Charsets.UTF_8
  • Charsets.ISO_8859_1
  • Charsets.US_ASCII

CopyStream

CopyStreamException / CopyStreamListener / CopyStreamEvent用于在流复制过程中添加监听逻辑(例如显示进度条)。

使用场景:

  • 大文件上传/下载时显示进度
  • 监控复制过程中的异常或完成状态

八、总结建议

场景 推荐使用的工具类
流的复制、读写、关闭 IOUtils
文件/目录操作(复制、删除、读写) FileUtils
路径拼接、拆分、标准化 FilenameUtils
文件过滤(按名称、后缀等) FileFilterUtils
获取磁盘空间 FileSystemUtils
逐行读取文件 LineIterator
自定义删除策略 FileDeleteStrategy
字节序转换 EndianUtils
字符集常量 Charsets
带监听的流复制 CopyStreamListener 等相关类

开发需要跨平台兼容、高效处理 I/O 的 Java 应用,结合这些工具类一起使用,可以大幅提升开发效率并减少底层 I/O 编程错误。

相关推荐
她的男孩3 小时前
后台权限不只是菜单隐藏:Forge Admin 的 RBAC 权限链路拆解
java·后端·架构
Slow菜鸟3 小时前
Maven 仓库下载机制
java·数据库·maven
sycmancia3 小时前
Qt——文本打印与光标定位
开发语言·qt
一个诺诺前行的后端程序员3 小时前
rag+springai
java·eclipse
Hexian25803 小时前
SpringAI+RAG
java·spring·ai
故事和你913 小时前
洛谷-【动态规划1】动态规划的引入2
开发语言·数据结构·c++·算法·动态规划·图论
冰小忆3 小时前
类变量在继承场景下的初始化规则是怎样的?
java·前端·数据库
AI人工智能+电脑小能手3 小时前
【大白话说Java面试题 第71题】【Mysql篇】第1题:索引是什么?
java·开发语言·b树·mysql·面试
AC赳赳老秦4 小时前
OpenClaw碎片时间利用:设置轻量化自动化任务,高效利用职场碎片时间
java·大数据·运维·服务器·数据库·自动化·openclaw