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…...

多云管理“拦路虎”:深入解析网络互联、身份同步与成本可视化的技术复杂度
一、引言:多云环境的技术复杂性本质 企业采用多云策略已从技术选型升维至生存刚需。当业务系统分散部署在多个云平台时,基础设施的技术债呈现指数级积累。网络连接、身份认证、成本管理这三大核心挑战相互嵌套:跨云网络构建数据…...

Vue3 + Element Plus + TypeScript中el-transfer穿梭框组件使用详解及示例
使用详解 Element Plus 的 el-transfer 组件是一个强大的穿梭框组件,常用于在两个集合之间进行数据转移,如权限分配、数据选择等场景。下面我将详细介绍其用法并提供一个完整示例。 核心特性与用法 基本属性 v-model:绑定右侧列表的值&…...

YSYX学习记录(八)
C语言,练习0: 先创建一个文件夹,我用的是物理机: 安装build-essential 练习1: 我注释掉了 #include <stdio.h> 出现下面错误 在你的文本编辑器中打开ex1文件,随机修改或删除一部分,之后…...

汽车生产虚拟实训中的技能提升与生产优化
在制造业蓬勃发展的大背景下,虚拟教学实训宛如一颗璀璨的新星,正发挥着不可或缺且日益凸显的关键作用,源源不断地为企业的稳健前行与创新发展注入磅礴强大的动力。就以汽车制造企业这一极具代表性的行业主体为例,汽车生产线上各类…...
大模型多显卡多服务器并行计算方法与实践指南
一、分布式训练概述 大规模语言模型的训练通常需要分布式计算技术,以解决单机资源不足的问题。分布式训练主要分为两种模式: 数据并行:将数据分片到不同设备,每个设备拥有完整的模型副本 模型并行:将模型分割到不同设备,每个设备处理部分模型计算 现代大模型训练通常结合…...

Netty从入门到进阶(二)
二、Netty入门 1. 概述 1.1 Netty是什么 Netty is an asynchronous event-driven network application framework for rapid development of maintainable high performance protocol servers & clients. Netty是一个异步的、基于事件驱动的网络应用框架,用于…...

push [特殊字符] present
push 🆚 present 前言present和dismiss特点代码演示 push和pop特点代码演示 前言 在 iOS 开发中,push 和 present 是两种不同的视图控制器切换方式,它们有着显著的区别。 present和dismiss 特点 在当前控制器上方新建视图层级需要手动调用…...
PostgreSQL——环境搭建
一、Linux # 安装 PostgreSQL 15 仓库 sudo dnf install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-$(rpm -E %{rhel})-x86_64/pgdg-redhat-repo-latest.noarch.rpm# 安装之前先确认是否已经存在PostgreSQL rpm -qa | grep postgres# 如果存在࿰…...
探索Selenium:自动化测试的神奇钥匙
目录 一、Selenium 是什么1.1 定义与概念1.2 发展历程1.3 功能概述 二、Selenium 工作原理剖析2.1 架构组成2.2 工作流程2.3 通信机制 三、Selenium 的优势3.1 跨浏览器与平台支持3.2 丰富的语言支持3.3 强大的社区支持 四、Selenium 的应用场景4.1 Web 应用自动化测试4.2 数据…...

破解路内监管盲区:免布线低位视频桩重塑停车管理新标准
城市路内停车管理常因行道树遮挡、高位设备盲区等问题,导致车牌识别率低、逃费率高,传统模式在复杂路段束手无策。免布线低位视频桩凭借超低视角部署与智能算法,正成为破局关键。该设备安装于车位侧方0.5-0.7米高度,直接规避树枝遮…...