Java工具库——Commons IO的50个常用方法
工具库介绍
Commons IO(Apache Commons IO)是一个广泛用于 Java 开发的开源工具库,由Apache软件基金会维护和支持。这个库旨在简化文件和流操作,提供了各种实用工具类和方法,以便更轻松地进行输入输出操作。以下是 Commons IO 的一些主要特点和功能:
-
文件操作:Commons IO 提供了大量用于文件和目录操作的方法,包括创建、删除、重命名、复制、移动文件,以及递归地操作目录结构。
-
流处理:你可以使用 Commons IO 处理各种输入和输出流,包括读取、写入和操作流数据。这对于处理文本文件、二进制文件以及网络通信非常有用。
-
文件过滤和筛选:Commons IO 允许你轻松地筛选文件和目录,根据各种条件,如文件扩展名、文件大小、最后修改时间等。
-
文件内容操作:你可以比较两个文件的内容,查找文件中的文本,以及进行替换等操作。
-
自动关闭流:Commons IO 提供了自动关闭流的功能,确保在处理文件和流时,资源得以正确释放,而无需显式调用
close()
方法。 -
异常处理:库中的方法通常会处理 I/O 异常,以简化代码中的错误处理。
-
性能和可靠性:Commons IO 被广泛使用,因为它经过了精心设计,以提供高性能和可靠性。这对于处理大型文件和在生产环境中运行的应用程序非常重要。
Commons IO 是一个非常有用的工具库,特别是在需要处理文件和流的 Java 应用程序中。它可以显著简化日常的 I/O 任务,减少了编写重复性代码的需要,提高了开发效率。如果你是 Java 开发者,特别是在处理文件和流方面,建议考虑使用 Commons IO 来简化你的工作。你可以在 Apache Commons IO 的官方网站上找到详细的文档和示例代码,以了解如何使用这个库。
方法列举
-
拷贝文件:
File source = new File("source.txt"); File destination = new File("destination.txt"); FileUtils.copyFile(source, destination);
这个方法用于将一个文件从源路径复制到目标路径。
-
删除文件:
File fileToDelete = new File("fileToDelete.txt"); FileUtils.forceDelete(fileToDelete);
这个方法用于强制删除一个文件,即使它是只读的或不存在。
-
检查文件是否存在:
File fileToCheck = new File("checkFile.txt"); boolean fileExists = fileToCheck.exists();
用于检查给定文件是否存在。
-
递归拷贝目录:
File sourceDir = new File("sourceDir"); File destDir = new File("destDir"); FileUtils.copyDirectory(sourceDir, destDir);
这个方法将递归地拷贝一个目录及其所有内容到目标目录。
-
递归删除目录:
File directoryToDelete = new File("directoryToDelete"); FileUtils.deleteDirectory(directoryToDelete);
用于递归删除一个目录及其所有内容。
-
获取文件扩展名:
String fileName = "example.txt"; String fileExtension = FilenameUtils.getExtension(fileName);
通过文件名获取文件的扩展名,例如,对于 “example.txt”,将返回 “txt”。
-
判断文件是否是目录:
File file = new File("dir"); boolean isDirectory = file.isDirectory();
用于检查给定文件是否是目录。
-
创建目录:
File newDir = new File("newDir"); FileUtils.forceMkdir(newDir);
用于创建目录,包括创建任何中间目录(如果它们不存在)。
-
获取文件大小:
File file = new File("file.txt"); long fileSize = FileUtils.sizeOf(file);
获取文件的大小,以字节为单位。
-
读取文件到字符串:
File fileToRead = new File("readMe.txt"); String fileContent = FileUtils.readFileToString(fileToRead, "UTF-8");
用于将文件内容读取为字符串,可以指定字符编码。
-
写入字符串到文件:
File outputFile = new File("output.txt"); String content = "Hello, World!"; FileUtils.writeStringToFile(outputFile, content, "UTF-8");
用于将字符串写入文件,可以指定字符编码。
-
列出目录中的文件:
File directory = new File("directory"); String[] filesInDir = directory.list();
用于获取指定目录中的文件和子目录的名称列表。
-
获取文件的最后修改时间:
File file = new File("file.txt"); long lastModified = file.lastModified();
获取文件的最后修改时间,以毫秒为单位。
-
移动文件:
File oldFile = new File("oldFile.txt"); File newFile = new File("newFile.txt"); FileUtils.moveFile(oldFile, newFile);
用于将文件从一个位置移动到另一个位置。
-
查找文件:
File searchDir = new File("searchDir"); Collection<File> foundFiles = FileUtils.listFiles(searchDir, TrueFileFilter.TRUE, TrueFileFilter.TRUE);
用于在目录中查找文件,并将结果作为文件对象的集合返回。
-
关闭输入流:
InputStream inputStream = ...; // 初始化输入流 IOUtils.closeQuietly(inputStream);
用于关闭输入流,忽略任何可能的异常。
-
关闭输出流:
OutputStream outputStream = ...; // 初始化输出流 IOUtils.closeQuietly(outputStream);
用于关闭输出流,忽略任何可能的异常。
-
逐行读取文件:
File file = new File("file.txt"); LineIterator lines = FileUtils.lineIterator(file, "UTF-8"); while (lines.hasNext()) {String line = lines.next();// 处理每一行 } lines.close(); // 关闭 LineIterator
用于逐行读取文件内容,避免一次性加载整个文件。
-
拷贝输入流到输出流:
InputStream inputStream = ...; // 初始化输入流 OutputStream outputStream = ...; // 初始化输出流 IOUtils.copy(inputStream, outputStream);
用于将输入流的内容拷贝到输出流,通常用于文件拷贝。
-
拷贝文件内容到输出流:
File sourceFile = new File("source.txt"); OutputStream outputStream = ...; // 初始化输出流 FileUtils.copyFile(sourceFile, outputStream);
用于将文件内容拷贝到输出流,这样你可以将文件的内容传输到其他地方,如网络连接或压缩流。
-
获取文件的父目录:
File file = new File("file.txt"); File parentDir = file.getParentFile();
用于获取文件的父目录,返回一个
File
对象。 -
获取临时目录:
File tempDir = FileUtils.getTempDirectory();
用于获取操作系统的临时目录。
-
获取用户主目录:
File userHomeDir = FileUtils.getUserDirectory();
用于获取用户的主目录,通常是用户文件的根目录。
当然,我会继续列出更多 Commons IO 方法,以满足 50 个方法的要求。以下是更多的方法示例和详细解释: -
比较文件内容:
File file1 = new File("file1.txt"); File file2 = new File("file2.txt"); boolean contentEqual = FileUtils.contentEquals(file1, file2);
用于比较两个文件的内容是否相同。
-
检查文件是否可写:
File file = new File("writableFile.txt"); boolean isWritable = file.canWrite();
用于检查文件是否可写。
-
获取文件的绝对路径:
File file = new File("file.txt"); String absolutePath = file.getAbsolutePath();
用于获取文件的绝对路径。
-
获取目录下的子目录:
File directory = new File("parentDir"); File[] subdirectories = directory.listFiles(File::isDirectory);
用于获取目录下的所有子目录。
-
获取文件的扩展名(不包括点号):
String fileName = "example.txt"; String extension = FilenameUtils.getExtension(fileName);
用于获取文件的扩展名,不包括点号,例如,对于 “example.txt”,将返回 “txt”。
-
判断文件是否是隐藏文件:
File file = new File("hiddenFile.txt"); boolean isHidden = file.isHidden();
用于检查文件是否是隐藏文件。
-
获取操作系统文件分隔符:
String fileSeparator = File.separator;
用于获取操作系统的文件分隔符,例如,在 Windows 中是反斜杠(\),在 Unix/Linux 中是正斜杠(/)。
-
关闭 Reader:
Reader reader = ...; // 初始化 Reader IOUtils.closeQuietly(reader);
用于关闭字符流 Reader,忽略任何可能的异常。
-
关闭 Writer:
Writer writer = ...; // 初始化 Writer IOUtils.closeQuietly(writer);
用于关闭字符流 Writer,忽略任何可能的异常。
-
递归列出目录中的文件:
File directory = new File("parentDir"); Collection<File> allFiles = FileUtils.listFiles(directory, TrueFileFilter.INSTANCE, TrueFileFilter.INSTANCE);
用于递归列出目录中的所有文件,包括子目录中的文件。
-
获取文件的最后访问时间:
File file = new File("file.txt"); long lastAccessTime = FileUtils.lastAccessed(file);
用于获取文件的最后访问时间,以毫秒为单位。
-
删除目录中的文件:
File directory = new File("dirToDelete"); FileUtils.cleanDirectory(directory);
用于删除目录中的所有文件,但保留目录结构。
-
获取临时文件:
File tempFile = File.createTempFile("temp", ".txt");
用于创建一个临时文件,通常在操作完成后会被自动删除。
-
获取文件的父目录路径:
File file = new File("file.txt"); String parentPath = file.getParent();
用于获取文件的父目录的路径。
-
获取文件的大小的可读表示:
File file = new File("file.txt"); String readableSize = FileUtils.byteCountToDisplaySize(file.length());
用于将文件大小以字节表示转换为易读的格式,例如 “2.5 MB”。
-
创建临时目录:
File tempDir = File.createTempFile("tempDir", ""); tempDir.delete(); // 删除文件,使其成为目录
用于创建一个临时目录。
-
读取 URL 内容到字符串:
String urlContent = IOUtils.toString(new URL("https://example.com"));
用于将 URL 的内容读取为字符串。
-
写入字符串到 URL:
URL url = new URL("https://example.com"); String content = "Hello, World!"; IOUtils.write(content, url.openConnection().getOutputStream(), "UTF-8");
用于将字符串写入 URL。
-
比较目录结构:
File dir1 = new File("directory1"); File dir2 = new File("directory2"); boolean isSame = FileUtils.contentEqualsIgnoreEOL(dir1, dir2, "UTF-8");
用于比较两个目录的内容是否相同,忽略不同操作系统的换行符。
-
获取文件的创建时间:
File file = new File("file.txt"); BasicFileAttributes attributes = Files.readAttributes(file.toPath(), BasicFileAttributes.class); FileTime creationTime = attributes.creationTime();
用于获取文件的创建时间。
-
文件拷贝,保留文件属性:
File source = new File("source.txt"); File destination = new File("destination.txt"); FileUtils.copyFile(source, destination, true);
用于拷贝文件,保留原文件的属性,如权限和时间戳。
-
获取临时文件夹的路径:
String tempDirPath = System.getProperty("java.io.tmpdir");
用于获取操作系统的临时文件夹路径。
-
文件重命名:
File oldFile = new File("oldName.txt"); File newFile = new File("newName.txt"); FileUtils.moveFile(oldFile, newFile);
用于将文件重命名。
-
文件内容替换:
File file = new File("file.txt"); String oldText = "replaceThis"; String newText = "withThis"; String replacedText = FileUtils.readFileToString(file, "UTF-8"); replacedText = StringUtils.replace(re
placedText, oldText, newText);
FileUtils.writeStringToFile(file, replacedText, “UTF-8”);
```
用于替换文件中的指定文本。
-
递归删除指定文件:
File directory = new File("parentDir"); String fileNameToDelete = "fileToDelete.txt"; FileFilter fileFilter = new NameFileFilter(fileNameToDelete); Collection<File> foundFiles = FileUtils.listFiles(directory, fileFilter, TrueFileFilter.TRUE); for (File fileToDelete : foundFiles) {FileUtils.forceDelete(fileToDelete); }
用于递归删除指定文件名的文件。
-
将文件内容附加到已存在的文件:
File fileToAppend = new File("append.txt"); FileUtils.writeStringToFile(fileToAppend, "Appended Text", "UTF-8", true);
用于将文本内容附加到已存在的文件。
-
递归列出目录中的文件和子目录:
File directory = new File("parentDir"); Collection<File> allFilesAndDirs = FileUtils.listFilesAndDirs(directory, TrueFileFilter.INSTANCE, TrueFileFilter.INSTANCE);
用于递归列出目录中的所有文件和子目录。
相关文章:

Java工具库——Commons IO的50个常用方法
工具库介绍 Commons IO(Apache Commons IO)是一个广泛用于 Java 开发的开源工具库,由Apache软件基金会维护和支持。这个库旨在简化文件和流操作,提供了各种实用工具类和方法,以便更轻松地进行输入输出操作。以下是 Com…...
Git: 仓库clone和用户配置
git clone 两种方式clone远程仓库到本地。 通过ssh 命令格式: git clone gitxxxxxx.git使用这种方法需要提前创建ssh秘钥。 首先打开一个git控制台,输入命令 ssh-keygen -t ed25519 -C “xxxxxxxxxx.com”输入命令后需要点击四次回车,其…...

构建外卖小程序:技术要点和实际代码
1. 前端开发 前端开发涉及用户界面设计和用户交互。HTML、CSS 和 JavaScript 是构建外卖小程序界面的主要技术。 <!-- HTML 结构示例 --> <header><h1>外卖小程序</h1><!-- 其他导航元素 --> </header> <main><!-- 菜单显示 -…...
ubuntu安装配置svn
目录 简介安装SVN 启动模式方式1:单库svnserve方式方式2:多库svnserve方式 SVN 创建版本库1.svn 服务配置文件 svnserve.conf2.用户名口令文件 passwd3.权限配置文件4.多库方式运行 SVN 检出操作SVN 解决冲突SVN 提交操作SVN 版本回退SVN 查看历史信息1.svn log2.svn diff3.svn…...

『Jmeter入门万字长文』 | 从环境搭建、脚本设计、执行步骤到生成监控报告完整过程
『Jmeter入门万字长文』 | 从环境搭建、脚本设计、执行步骤到生成监控报告完整过程 1 Jmeter安装1.1 下载安装1.2 Jmeter汉化1.2.1 临时修改1.2.2 永久修改 1.3 验证环境 2 测试对象2.1 测试对象说明2.2 测试对象安装2.2.1 下载安装2.2.2 启动测试对象服务2.2.3 访问测试对象2.…...

Unity C#中LuaTable、LuaArrayTable、LuaDictTable中数据的增删改查
LuaTable、LuaArrayTable、LuaDictTable中数据的增删改查 介绍Lua表lua表初始化lua移除引用lua中向表中添加数据lua中表中移除数据lua表中连接数据lua表中数据排序获取lua表长度获取表中最大值 UnityC#中LuaTableUnityC#中LuaArrayTable、LuaDictTable、LuaDictTable<K,V>…...
Spring常见面试题
https://blog.csdn.net/a745233700/article/details/80959716?ops_request_misc%257B%2522request%255Fid%2522%253A%2522169847982516800213061720%2522%252C%2522scm%2522%253A%252220140713.130102334…%2522%257D&request_id169847982516800213061720&biz_id0&…...

通过Vue自带服务器实现Ajax请求跨域(vue-cli)
通过Vue自带服务器实现Ajax请求跨域(vue-cli) 跨域 原理:从A页面访问到B页面,并且要获取到B页面上的数据,而两个页面所在的端口、协议和域名中哪怕有一个不对等,那么这种行为就叫跨域。注意:类…...
Vue2-计算属性的用法
题记 vue2计算属性的用法 反转字符串 <!DOCTYPE html> <html> <head> <meta charset"utf-8"> <title>实例</title> <script src"https://cdn.staticfile.org/vue/2.2.2/vue.min.js"></script> </hea…...
SM3加密udf
SM3加密udf maven xml <dependencies> <!-- 配置日志 --> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>1.7.5</version> </dep…...

ce从初阶到大牛(两台主机免密登录)
一、配置ssh远程连接 实现两台linux主机之间通过公钥验证能够互相实现免密登陆 1.确认服务程序是否安装 rpm -qa | grep ssh 2.是否启动 ps -aux | grep ssh 3.生成非对称公钥 ssh-keygen -t rsa 4.公钥发送到客户端 cd /root/.ssh/ ssh-copy-id root192.168.170.134 因为…...

CS224W2.3——传统基于特征的方法(图层级特征)
前两篇中我们讨论了节点层级的特征表示、边层级的特征表示: CS224W2.1——传统基于特征的方法(节点层级特征)CS224W2.2——传统基于特征的方法(边层级特征) 在这篇中,我们将重点从整个图中提取特征。换句话说,我们想要描述整个图结构的特征…...

【CSS】包含块
CSS规范中的包含块 包含块的内容: 元素的尺寸和位置,会受它的包含块所影响。 对于一些属性,例如 width, height, padding, margin,绝对定位元素的偏移值(比如 position 被设置为 absolute 或 fixed)&…...

[SpringCloud] Nacos 简介
目录 一、Nacos,启动! 1、安装 Nacos 2、运行 Nacos 3、Nacos 服务注册 二、Nacos 服务多级存储模型 1、服务跨集群分配 2、NacosRule 负载均衡(优先本地) 3、服务实例的权重设置 4、环境隔离 三、Nacos 注册中心细节分…...
TypeScript - 字符串的字面类型
啥是字面量类型 字面量类型,是限制了一个字符串变量的取值范围只能某几个固定字符串中的一个。 我感觉 与枚举类型有异曲同工之妙。 字符串字面量类型有啥用 没啥用。 就是来限制字符串变量不能随便赋值的。 定义一个我看看 让你读书,但是只有四本书可以…...

CRM客户管理系统源码 带移动端APP+H5+小程序
CRM客户管理系统源码 带移动端APPH5小程序 开发环境: thinkphp mysql 功能介绍: 1、 办公管理:审批管理、工作报告、日程管理、办公审批、公告管理 2、 客户管理:我的客户、客户列表、成交客户、行业类别、预查、地区列表、客户状态、客…...

Mac版好用的Git客户端 Fork 免激活
Fork是一款强大的Git客户端软件,在Mac和Windows操作系统上都可以使用。汇集了众多先进的功能和工具,可以帮助用户更方便地管理和控制Git仓库。 Fork的界面简洁直观,易于使用。它提供了许多高级的Git功能,如分支管理、合并、提交、…...

有一个带头结点的单链表L,设计一个算法使其元素递增有序
有一个带头结点的单链表L,设计一个算法使其元素递增有序 代码思路: 我这里懒得搞那个指针了,直接遍历一遍链表,把链表的元素复制到数组arr里面 对数组A进行一下排序,排完之后再把元素复制到L里面。 至于排序你用啥算…...

JAVA将EEE MMM dd HH:mm:ss zzz yyyy日期格式化为yyyy-MM-dd HH:mm:ss形式
1、将EEE MMM dd HH:mm:ss zzz yyyy格式的数据转换成yyyy-MM-dd HH:mm:ss 代码如下 public static void main(String[] args) throws ParseException {String dateStr "Mon Oct 26 15:19:15 CST 2020";DateFormat cstFormate new SimpleDateFormat("yyyy-MM…...

【Qt】文件系统
文章目录 文件系统文件操作案例:显示路径到标题框,显示内容到文本框对文件进行写操作获取文件相关信息 文件系统 Qt 通过QIODevice提供了对 I/O 设备的抽象,这些设备具有读写字节块的能力,下面是 I/O 设备的类图: QIO…...

手游刚开服就被攻击怎么办?如何防御DDoS?
开服初期是手游最脆弱的阶段,极易成为DDoS攻击的目标。一旦遭遇攻击,可能导致服务器瘫痪、玩家流失,甚至造成巨大经济损失。本文为开发者提供一套简洁有效的应急与防御方案,帮助快速应对并构建长期防护体系。 一、遭遇攻击的紧急应…...

(二)TensorRT-LLM | 模型导出(v0.20.0rc3)
0. 概述 上一节 对安装和使用有个基本介绍。根据这个 issue 的描述,后续 TensorRT-LLM 团队可能更专注于更新和维护 pytorch backend。但 tensorrt backend 作为先前一直开发的工作,其中包含了大量可以学习的地方。本文主要看看它导出模型的部分&#x…...

Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility
Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility 1. 实验室环境1.1 实验室环境1.2 小测试 2. The Endor System2.1 部署应用2.2 检查现有策略 3. Cilium 策略实体3.1 创建 allow-all 网络策略3.2 在 Hubble CLI 中验证网络策略源3.3 …...

【SQL学习笔记1】增删改查+多表连接全解析(内附SQL免费在线练习工具)
可以使用Sqliteviz这个网站免费编写sql语句,它能够让用户直接在浏览器内练习SQL的语法,不需要安装任何软件。 链接如下: sqliteviz 注意: 在转写SQL语法时,关键字之间有一个特定的顺序,这个顺序会影响到…...
python爬虫:Newspaper3k 的详细使用(好用的新闻网站文章抓取和解析的Python库)
更多内容请见: 爬虫和逆向教程-专栏介绍和目录 文章目录 一、Newspaper3k 概述1.1 Newspaper3k 介绍1.2 主要功能1.3 典型应用场景1.4 安装二、基本用法2.2 提取单篇文章的内容2.2 处理多篇文档三、高级选项3.1 自定义配置3.2 分析文章情感四、实战案例4.1 构建新闻摘要聚合器…...

《基于Apache Flink的流处理》笔记
思维导图 1-3 章 4-7章 8-11 章 参考资料 源码: https://github.com/streaming-with-flink 博客 https://flink.apache.org/bloghttps://www.ververica.com/blog 聚会及会议 https://flink-forward.orghttps://www.meetup.com/topics/apache-flink https://n…...

JVM 内存结构 详解
内存结构 运行时数据区: Java虚拟机在运行Java程序过程中管理的内存区域。 程序计数器: 线程私有,程序控制流的指示器,分支、循环、跳转、异常处理、线程恢复等基础功能都依赖这个计数器完成。 每个线程都有一个程序计数…...
【无标题】路径问题的革命性重构:基于二维拓扑收缩色动力学模型的零点隧穿理论
路径问题的革命性重构:基于二维拓扑收缩色动力学模型的零点隧穿理论 一、传统路径模型的根本缺陷 在经典正方形路径问题中(图1): mermaid graph LR A((A)) --- B((B)) B --- C((C)) C --- D((D)) D --- A A -.- C[无直接路径] B -…...
Java数值运算常见陷阱与规避方法
整数除法中的舍入问题 问题现象 当开发者预期进行浮点除法却误用整数除法时,会出现小数部分被截断的情况。典型错误模式如下: void process(int value) {double half = value / 2; // 整数除法导致截断// 使用half变量 }此时...

2025年渗透测试面试题总结-腾讯[实习]科恩实验室-安全工程师(题目+回答)
安全领域各种资源,学习文档,以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各种好玩的项目及好用的工具,欢迎关注。 目录 腾讯[实习]科恩实验室-安全工程师 一、网络与协议 1. TCP三次握手 2. SYN扫描原理 3. HTTPS证书机制 二…...