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…...
变量 varablie 声明- Rust 变量 let mut 声明与 C/C++ 变量声明对比分析
一、变量声明设计:let 与 mut 的哲学解析 Rust 采用 let 声明变量并通过 mut 显式标记可变性,这种设计体现了语言的核心哲学。以下是深度解析: 1.1 设计理念剖析 安全优先原则:默认不可变强制开发者明确声明意图 let x 5; …...
19c补丁后oracle属主变化,导致不能识别磁盘组
补丁后服务器重启,数据库再次无法启动 ORA01017: invalid username/password; logon denied Oracle 19c 在打上 19.23 或以上补丁版本后,存在与用户组权限相关的问题。具体表现为,Oracle 实例的运行用户(oracle)和集…...
大话软工笔记—需求分析概述
需求分析,就是要对需求调研收集到的资料信息逐个地进行拆分、研究,从大量的不确定“需求”中确定出哪些需求最终要转换为确定的“功能需求”。 需求分析的作用非常重要,后续设计的依据主要来自于需求分析的成果,包括: 项目的目的…...
ardupilot 开发环境eclipse 中import 缺少C++
目录 文章目录 目录摘要1.修复过程摘要 本节主要解决ardupilot 开发环境eclipse 中import 缺少C++,无法导入ardupilot代码,会引起查看不方便的问题。如下图所示 1.修复过程 0.安装ubuntu 软件中自带的eclipse 1.打开eclipse—Help—install new software 2.在 Work with中…...
在WSL2的Ubuntu镜像中安装Docker
Docker官网链接: https://docs.docker.com/engine/install/ubuntu/ 1、运行以下命令卸载所有冲突的软件包: for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done2、设置Docker…...
三分算法与DeepSeek辅助证明是单峰函数
前置 单峰函数有唯一的最大值,最大值左侧的数值严格单调递增,最大值右侧的数值严格单调递减。 单谷函数有唯一的最小值,最小值左侧的数值严格单调递减,最小值右侧的数值严格单调递增。 三分的本质 三分和二分一样都是通过不断缩…...
springboot 日志类切面,接口成功记录日志,失败不记录
springboot 日志类切面,接口成功记录日志,失败不记录 自定义一个注解方法 import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target;/***…...
《Offer来了:Java面试核心知识点精讲》大纲
文章目录 一、《Offer来了:Java面试核心知识点精讲》的典型大纲框架Java基础并发编程JVM原理数据库与缓存分布式架构系统设计二、《Offer来了:Java面试核心知识点精讲(原理篇)》技术文章大纲核心主题:Java基础原理与面试高频考点Java虚拟机(JVM)原理Java并发编程原理Jav…...
2025-05-08-deepseek本地化部署
title: 2025-05-08-deepseek 本地化部署 tags: 深度学习 程序开发 2025-05-08-deepseek 本地化部署 参考博客 本地部署 DeepSeek:小白也能轻松搞定! 如何给本地部署的 DeepSeek 投喂数据,让他更懂你 [实验目的]:理解系统架构与原…...
MeshGPT 笔记
[2311.15475] MeshGPT: Generating Triangle Meshes with Decoder-Only Transformers https://library.scholarcy.com/try 真正意义上的AI生成三维模型MESHGPT来袭!_哔哩哔哩_bilibili GitHub - lucidrains/meshgpt-pytorch: Implementation of MeshGPT, SOTA Me…...
