当前位置: 首页 > news >正文

Java工具库——Commons IO的50个常用方法

在这里插入图片描述

工具库介绍

Commons IO(Apache Commons IO)是一个广泛用于 Java 开发的开源工具库,由Apache软件基金会维护和支持。这个库旨在简化文件和流操作,提供了各种实用工具类和方法,以便更轻松地进行输入输出操作。以下是 Commons IO 的一些主要特点和功能:

  1. 文件操作:Commons IO 提供了大量用于文件和目录操作的方法,包括创建、删除、重命名、复制、移动文件,以及递归地操作目录结构。

  2. 流处理:你可以使用 Commons IO 处理各种输入和输出流,包括读取、写入和操作流数据。这对于处理文本文件、二进制文件以及网络通信非常有用。

  3. 文件过滤和筛选:Commons IO 允许你轻松地筛选文件和目录,根据各种条件,如文件扩展名、文件大小、最后修改时间等。

  4. 文件内容操作:你可以比较两个文件的内容,查找文件中的文本,以及进行替换等操作。

  5. 自动关闭流:Commons IO 提供了自动关闭流的功能,确保在处理文件和流时,资源得以正确释放,而无需显式调用close()方法。

  6. 异常处理:库中的方法通常会处理 I/O 异常,以简化代码中的错误处理。

  7. 性能和可靠性:Commons IO 被广泛使用,因为它经过了精心设计,以提供高性能和可靠性。这对于处理大型文件和在生产环境中运行的应用程序非常重要。

Commons IO 是一个非常有用的工具库,特别是在需要处理文件和流的 Java 应用程序中。它可以显著简化日常的 I/O 任务,减少了编写重复性代码的需要,提高了开发效率。如果你是 Java 开发者,特别是在处理文件和流方面,建议考虑使用 Commons IO 来简化你的工作。你可以在 Apache Commons IO 的官方网站上找到详细的文档和示例代码,以了解如何使用这个库。

方法列举

  1. 拷贝文件

    File source = new File("source.txt");
    File destination = new File("destination.txt");
    FileUtils.copyFile(source, destination);
    

    这个方法用于将一个文件从源路径复制到目标路径。

  2. 删除文件

    File fileToDelete = new File("fileToDelete.txt");
    FileUtils.forceDelete(fileToDelete);
    

    这个方法用于强制删除一个文件,即使它是只读的或不存在。

  3. 检查文件是否存在

    File fileToCheck = new File("checkFile.txt");
    boolean fileExists = fileToCheck.exists();
    

    用于检查给定文件是否存在。

  4. 递归拷贝目录

    File sourceDir = new File("sourceDir");
    File destDir = new File("destDir");
    FileUtils.copyDirectory(sourceDir, destDir);
    

    这个方法将递归地拷贝一个目录及其所有内容到目标目录。

  5. 递归删除目录

    File directoryToDelete = new File("directoryToDelete");
    FileUtils.deleteDirectory(directoryToDelete);
    

    用于递归删除一个目录及其所有内容。

  6. 获取文件扩展名

    String fileName = "example.txt";
    String fileExtension = FilenameUtils.getExtension(fileName);
    

    通过文件名获取文件的扩展名,例如,对于 “example.txt”,将返回 “txt”。

  7. 判断文件是否是目录

    File file = new File("dir");
    boolean isDirectory = file.isDirectory();
    

    用于检查给定文件是否是目录。

  8. 创建目录

    File newDir = new File("newDir");
    FileUtils.forceMkdir(newDir);
    

    用于创建目录,包括创建任何中间目录(如果它们不存在)。

  9. 获取文件大小

    File file = new File("file.txt");
    long fileSize = FileUtils.sizeOf(file);
    

    获取文件的大小,以字节为单位。

  10. 读取文件到字符串

    File fileToRead = new File("readMe.txt");
    String fileContent = FileUtils.readFileToString(fileToRead, "UTF-8");
    

    用于将文件内容读取为字符串,可以指定字符编码。

  11. 写入字符串到文件

    File outputFile = new File("output.txt");
    String content = "Hello, World!";
    FileUtils.writeStringToFile(outputFile, content, "UTF-8");
    

    用于将字符串写入文件,可以指定字符编码。

  12. 列出目录中的文件

    File directory = new File("directory");
    String[] filesInDir = directory.list();
    

    用于获取指定目录中的文件和子目录的名称列表。

  13. 获取文件的最后修改时间

    File file = new File("file.txt");
    long lastModified = file.lastModified();
    

    获取文件的最后修改时间,以毫秒为单位。

  14. 移动文件

    File oldFile = new File("oldFile.txt");
    File newFile = new File("newFile.txt");
    FileUtils.moveFile(oldFile, newFile);
    

    用于将文件从一个位置移动到另一个位置。

  15. 查找文件

    File searchDir = new File("searchDir");
    Collection<File> foundFiles = FileUtils.listFiles(searchDir, TrueFileFilter.TRUE, TrueFileFilter.TRUE);
    

    用于在目录中查找文件,并将结果作为文件对象的集合返回。

  16. 关闭输入流

    InputStream inputStream = ...; // 初始化输入流
    IOUtils.closeQuietly(inputStream);
    

    用于关闭输入流,忽略任何可能的异常。

  17. 关闭输出流

    OutputStream outputStream = ...; // 初始化输出流
    IOUtils.closeQuietly(outputStream);
    

    用于关闭输出流,忽略任何可能的异常。

  18. 逐行读取文件

    File file = new File("file.txt");
    LineIterator lines = FileUtils.lineIterator(file, "UTF-8");
    while (lines.hasNext()) {String line = lines.next();// 处理每一行
    }
    lines.close(); // 关闭 LineIterator
    

    用于逐行读取文件内容,避免一次性加载整个文件。

  19. 拷贝输入流到输出流

    InputStream inputStream = ...; // 初始化输入流
    OutputStream outputStream = ...; // 初始化输出流
    IOUtils.copy(inputStream, outputStream);
    

    用于将输入流的内容拷贝到输出流,通常用于文件拷贝。

  20. 拷贝文件内容到输出流

    File sourceFile = new File("source.txt");
    OutputStream outputStream = ...; // 初始化输出流
    FileUtils.copyFile(sourceFile, outputStream);
    

    用于将文件内容拷贝到输出流,这样你可以将文件的内容传输到其他地方,如网络连接或压缩流。

  21. 获取文件的父目录

    File file = new File("file.txt");
    File parentDir = file.getParentFile();
    

    用于获取文件的父目录,返回一个 File 对象。

  22. 获取临时目录

    File tempDir = FileUtils.getTempDirectory();
    

    用于获取操作系统的临时目录。

  23. 获取用户主目录

    File userHomeDir = FileUtils.getUserDirectory();
    

    用于获取用户的主目录,通常是用户文件的根目录。
    当然,我会继续列出更多 Commons IO 方法,以满足 50 个方法的要求。以下是更多的方法示例和详细解释:

  24. 比较文件内容

    File file1 = new File("file1.txt");
    File file2 = new File("file2.txt");
    boolean contentEqual = FileUtils.contentEquals(file1, file2);
    

    用于比较两个文件的内容是否相同。

  25. 检查文件是否可写

    File file = new File("writableFile.txt");
    boolean isWritable = file.canWrite();
    

    用于检查文件是否可写。

  26. 获取文件的绝对路径

    File file = new File("file.txt");
    String absolutePath = file.getAbsolutePath();
    

    用于获取文件的绝对路径。

  27. 获取目录下的子目录

    File directory = new File("parentDir");
    File[] subdirectories = directory.listFiles(File::isDirectory);
    

    用于获取目录下的所有子目录。

  28. 获取文件的扩展名(不包括点号)

    String fileName = "example.txt";
    String extension = FilenameUtils.getExtension(fileName);
    

    用于获取文件的扩展名,不包括点号,例如,对于 “example.txt”,将返回 “txt”。

  29. 判断文件是否是隐藏文件

    File file = new File("hiddenFile.txt");
    boolean isHidden = file.isHidden();
    

    用于检查文件是否是隐藏文件。

  30. 获取操作系统文件分隔符

    String fileSeparator = File.separator;
    

    用于获取操作系统的文件分隔符,例如,在 Windows 中是反斜杠(\),在 Unix/Linux 中是正斜杠(/)。

  31. 关闭 Reader

    Reader reader = ...; // 初始化 Reader
    IOUtils.closeQuietly(reader);
    

    用于关闭字符流 Reader,忽略任何可能的异常。

  32. 关闭 Writer

    Writer writer = ...; // 初始化 Writer
    IOUtils.closeQuietly(writer);
    

    用于关闭字符流 Writer,忽略任何可能的异常。

  33. 递归列出目录中的文件

    File directory = new File("parentDir");
    Collection<File> allFiles = FileUtils.listFiles(directory, TrueFileFilter.INSTANCE, TrueFileFilter.INSTANCE);
    

    用于递归列出目录中的所有文件,包括子目录中的文件。

  34. 获取文件的最后访问时间

    File file = new File("file.txt");
    long lastAccessTime = FileUtils.lastAccessed(file);
    

    用于获取文件的最后访问时间,以毫秒为单位。

  35. 删除目录中的文件

    File directory = new File("dirToDelete");
    FileUtils.cleanDirectory(directory);
    

    用于删除目录中的所有文件,但保留目录结构。

  36. 获取临时文件

    File tempFile = File.createTempFile("temp", ".txt");
    

    用于创建一个临时文件,通常在操作完成后会被自动删除。

  37. 获取文件的父目录路径

    File file = new File("file.txt");
    String parentPath = file.getParent();
    

    用于获取文件的父目录的路径。

  38. 获取文件的大小的可读表示

    File file = new File("file.txt");
    String readableSize = FileUtils.byteCountToDisplaySize(file.length());
    

    用于将文件大小以字节表示转换为易读的格式,例如 “2.5 MB”。

  39. 创建临时目录

    File tempDir = File.createTempFile("tempDir", "");
    tempDir.delete(); // 删除文件,使其成为目录
    

    用于创建一个临时目录。

  40. 读取 URL 内容到字符串

    String urlContent = IOUtils.toString(new URL("https://example.com"));
    

    用于将 URL 的内容读取为字符串。

  41. 写入字符串到 URL

    URL url = new URL("https://example.com");
    String content = "Hello, World!";
    IOUtils.write(content, url.openConnection().getOutputStream(), "UTF-8");
    

    用于将字符串写入 URL。

  42. 比较目录结构

    File dir1 = new File("directory1");
    File dir2 = new File("directory2");
    boolean isSame = FileUtils.contentEqualsIgnoreEOL(dir1, dir2, "UTF-8");
    

    用于比较两个目录的内容是否相同,忽略不同操作系统的换行符。

  43. 获取文件的创建时间

    File file = new File("file.txt");
    BasicFileAttributes attributes = Files.readAttributes(file.toPath(), BasicFileAttributes.class);
    FileTime creationTime = attributes.creationTime();
    

    用于获取文件的创建时间。

  44. 文件拷贝,保留文件属性

    File source = new File("source.txt");
    File destination = new File("destination.txt");
    FileUtils.copyFile(source, destination, true);
    

    用于拷贝文件,保留原文件的属性,如权限和时间戳。

  45. 获取临时文件夹的路径

    String tempDirPath = System.getProperty("java.io.tmpdir");
    

    用于获取操作系统的临时文件夹路径。

  46. 文件重命名

    File oldFile = new File("oldName.txt");
    File newFile = new File("newName.txt");
    FileUtils.moveFile(oldFile, newFile);
    

    用于将文件重命名。

  47. 文件内容替换

    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”);
```

用于替换文件中的指定文本。
  1. 递归删除指定文件

    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);
    }
    

    用于递归删除指定文件名的文件。

  2. 将文件内容附加到已存在的文件

    File fileToAppend = new File("append.txt");
    FileUtils.writeStringToFile(fileToAppend, "Appended Text", "UTF-8", true);
    

    用于将文本内容附加到已存在的文件。

  3. 递归列出目录中的文件和子目录

    File directory = new File("parentDir");
    Collection<File> allFilesAndDirs = FileUtils.listFilesAndDirs(directory, TrueFileFilter.INSTANCE, TrueFileFilter.INSTANCE);
    

    用于递归列出目录中的所有文件和子目录。

相关文章:

Java工具库——Commons IO的50个常用方法

工具库介绍 Commons IO&#xff08;Apache Commons IO&#xff09;是一个广泛用于 Java 开发的开源工具库&#xff0c;由Apache软件基金会维护和支持。这个库旨在简化文件和流操作&#xff0c;提供了各种实用工具类和方法&#xff0c;以便更轻松地进行输入输出操作。以下是 Com…...

Git: 仓库clone和用户配置

git clone 两种方式clone远程仓库到本地。 通过ssh 命令格式&#xff1a; git clone gitxxxxxx.git使用这种方法需要提前创建ssh秘钥。 首先打开一个git控制台&#xff0c;输入命令 ssh-keygen -t ed25519 -C “xxxxxxxxxx.com”输入命令后需要点击四次回车&#xff0c;其…...

构建外卖小程序:技术要点和实际代码

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请求跨域&#xff08;vue-cli&#xff09; 跨域 原理&#xff1a;从A页面访问到B页面&#xff0c;并且要获取到B页面上的数据&#xff0c;而两个页面所在的端口、协议和域名中哪怕有一个不对等&#xff0c;那么这种行为就叫跨域。注意&#xff1a;类…...

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——传统基于特征的方法(图层级特征)

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

【CSS】包含块

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

[SpringCloud] Nacos 简介

目录 一、Nacos&#xff0c;启动&#xff01; 1、安装 Nacos 2、运行 Nacos 3、Nacos 服务注册 二、Nacos 服务多级存储模型 1、服务跨集群分配 2、NacosRule 负载均衡&#xff08;优先本地&#xff09; 3、服务实例的权重设置 4、环境隔离 三、Nacos 注册中心细节分…...

TypeScript - 字符串的字面类型

啥是字面量类型 字面量类型&#xff0c;是限制了一个字符串变量的取值范围只能某几个固定字符串中的一个。 我感觉 与枚举类型有异曲同工之妙。 字符串字面量类型有啥用 没啥用。 就是来限制字符串变量不能随便赋值的。 定义一个我看看 让你读书&#xff0c;但是只有四本书可以…...

CRM客户管理系统源码 带移动端APP+H5+小程序

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

Mac版好用的Git客户端 Fork 免激活

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

有一个带头结点的单链表L,设计一个算法使其元素递增有序

有一个带头结点的单链表L&#xff0c;设计一个算法使其元素递增有序 代码思路&#xff1a; 我这里懒得搞那个指针了&#xff0c;直接遍历一遍链表&#xff0c;把链表的元素复制到数组arr里面 对数组A进行一下排序&#xff0c;排完之后再把元素复制到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】文件系统

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

JavaSec-RCE

简介 RCE(Remote Code Execution)&#xff0c;可以分为:命令注入(Command Injection)、代码注入(Code Injection) 代码注入 1.漏洞场景&#xff1a;Groovy代码注入 Groovy是一种基于JVM的动态语言&#xff0c;语法简洁&#xff0c;支持闭包、动态类型和Java互操作性&#xff0c…...

转转集团旗下首家二手多品类循环仓店“超级转转”开业

6月9日&#xff0c;国内领先的循环经济企业转转集团旗下首家二手多品类循环仓店“超级转转”正式开业。 转转集团创始人兼CEO黄炜、转转循环时尚发起人朱珠、转转集团COO兼红布林CEO胡伟琨、王府井集团副总裁祝捷等出席了开业剪彩仪式。 据「TMT星球」了解&#xff0c;“超级…...

ElasticSearch搜索引擎之倒排索引及其底层算法

文章目录 一、搜索引擎1、什么是搜索引擎?2、搜索引擎的分类3、常用的搜索引擎4、搜索引擎的特点二、倒排索引1、简介2、为什么倒排索引不用B+树1.创建时间长,文件大。2.其次,树深,IO次数可怕。3.索引可能会失效。4.精准度差。三. 倒排索引四、算法1、Term Index的算法2、 …...

MySQL 8.0 OCP 英文题库解析(十三)

Oracle 为庆祝 MySQL 30 周年&#xff0c;截止到 2025.07.31 之前。所有人均可以免费考取原价245美元的MySQL OCP 认证。 从今天开始&#xff0c;将英文题库免费公布出来&#xff0c;并进行解析&#xff0c;帮助大家在一个月之内轻松通过OCP认证。 本期公布试题111~120 试题1…...

代理篇12|深入理解 Vite中的Proxy接口代理配置

在前端开发中,常常会遇到 跨域请求接口 的情况。为了解决这个问题,Vite 和 Webpack 都提供了 proxy 代理功能,用于将本地开发请求转发到后端服务器。 什么是代理(proxy)? 代理是在开发过程中,前端项目通过开发服务器,将指定的请求“转发”到真实的后端服务器,从而绕…...

论文阅读笔记——Muffin: Testing Deep Learning Libraries via Neural Architecture Fuzzing

Muffin 论文 现有方法 CRADLE 和 LEMON&#xff0c;依赖模型推理阶段输出进行差分测试&#xff0c;但在训练阶段是不可行的&#xff0c;因为训练阶段直到最后才有固定输出&#xff0c;中间过程是不断变化的。API 库覆盖低&#xff0c;因为各个 API 都是在各种具体场景下使用。…...

在 Spring Boot 中使用 JSP

jsp&#xff1f; 好多年没用了。重新整一下 还费了点时间&#xff0c;记录一下。 项目结构&#xff1a; pom: <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://ww…...

消息队列系统设计与实践全解析

文章目录 &#x1f680; 消息队列系统设计与实践全解析&#x1f50d; 一、消息队列选型1.1 业务场景匹配矩阵1.2 吞吐量/延迟/可靠性权衡&#x1f4a1; 权衡决策框架 1.3 运维复杂度评估&#x1f527; 运维成本降低策略 &#x1f3d7;️ 二、典型架构设计2.1 分布式事务最终一致…...

Tauri2学习笔记

教程地址&#xff1a;https://www.bilibili.com/video/BV1Ca411N7mF?spm_id_from333.788.player.switch&vd_source707ec8983cc32e6e065d5496a7f79ee6 官方指引&#xff1a;https://tauri.app/zh-cn/start/ 目前Tauri2的教程视频不多&#xff0c;我按照Tauri1的教程来学习&…...

ZYNQ学习记录FPGA(二)Verilog语言

一、Verilog简介 1.1 HDL&#xff08;Hardware Description language&#xff09; 在解释HDL之前&#xff0c;先来了解一下数字系统设计的流程&#xff1a;逻辑设计 -> 电路实现 -> 系统验证。 逻辑设计又称前端&#xff0c;在这个过程中就需要用到HDL&#xff0c;正文…...