Hutool File 教程

Hutool 是一个 Java 工具库,文件操作是其核心功能之一。以下是常用文件操作方法的介绍。

1. 引入依赖

XML 复制代码
<dependency>
    <groupId>cn.hutool</groupId>
    <artifactId>hutool-all</artifactId>
    <version>5.8.26</version>
</dependency>

2. 文件读写

写入文件

java 复制代码
// 将字符串写入文件(自动创建父目录)
FileUtil.writeString("Hello World", "test.txt", CharsetUtil.UTF_8);

// 追加内容
FileUtil.appendString("追加内容", "test.txt", CharsetUtil.UTF_8);

// 写入集合(每行一个元素)
List<String> lines = Arrays.asList("行1", "行2", "行3");
FileUtil.writeLines(lines, "test.txt", CharsetUtil.UTF_8);

读取文件

java 复制代码
// 读取为字符串
String content = FileUtil.readString("test.txt", CharsetUtil.UTF_8);

// 按行读取为 List
List<String> lines = FileUtil.readLines("test.txt", CharsetUtil.UTF_8);

// 读取为 byte 数组
byte[] bytes = FileUtil.readBytes("test.txt");

// 读取为 BufferedInputStream
BufferedInputStream in = FileUtil.getInputStream("test.txt");

3. 文件复制/移动/删除

java 复制代码
// 复制文件
FileUtil.copy("src.txt", "dest.txt", true);  // true 表示覆盖

// 移动文件
FileUtil.move(FileUtil.file("src.txt"), FileUtil.file("dest.txt"), true);

// 删除文件
FileUtil.del("test.txt");

// 清空文件夹(保留目录)
FileUtil.clean("directory");

4. 文件/目录判断

java 复制代码
// 判断文件是否存在
boolean exists = FileUtil.exist("test.txt");

// 判断是否为目录
boolean isDir = FileUtil.isDirectory("dir");

// 判断是否为文件
boolean isFile = FileUtil.isFile("test.txt");

// 是否为空(文件长度为0 或 目录无子文件)
boolean isEmpty = FileUtil.isEmpty("test.txt");

5. 创建目录/文件

java 复制代码
// 创建目录(自动创建父目录)
FileUtil.mkdir("parent/child/grandchild");

// 创建文件(自动创建父目录)
FileUtil.touch("path/newfile.txt");

6. 文件名/路径操作

java 复制代码
String path = "D:/data/photo.jpg";

// 获取文件名
String name = FileUtil.getName(path);  // photo.jpg

// 获取主文件名
String mainName = FileUtil.mainName(path);  // photo

// 获取扩展名
String ext = FileUtil.extName(path);  // jpg

// 获取父路径
String parent = FileUtil.getParent(path, 1);  // D:/data

7. 遍历文件

java 复制代码
// 遍历目录下所有文件(递归)
FileLoopFiles files = FileUtil.loopFiles("dir");

// 带过滤器的遍历
FileFilter filter = pathname -> pathname.getName().endsWith(".txt");
List<File> txtFiles = FileUtil.loopFiles("dir", filter);

8. 文件类型判断

java 复制代码
// 获取 MIME 类型
String mime = FileMimeUtil.getMimeType("photo.jpg");  // image/jpeg

// 判断是否为图片
boolean isImage = FileTypeUtil.getType(new File("photo.jpg")).startsWith("image");

9. 常用工具类速查

工具类 用途
FileUtil 文件读写、复制、删除、创建等
FileTypeUtil 文件类型判断
FileWriter 文件写入器(带缓存)
FileReader 文件读取器(带缓存)
FileNameUtil 文件名处理(扩展名、主名等)
FileCopier 更灵活的文件复制
WatchMonitor 文件/目录监听

10. 高级操作示例

使用 FileWriter/FileReader

java 复制代码
// 链式写入
FileWriter writer = new FileWriter("test.txt");
writer.write("第一行")
      .write("第二行")
      .close();

// 带编码的读取器
FileReader reader = new FileReader("test.txt", CharsetUtil.UTF_8);
String content = reader.readString();

文件监听

java 复制代码
WatchMonitor watchMonitor = WatchMonitor.create(
    new File("test.txt"),
    WatchMonitor.EVENTS_ALL  // 所有事件
);
watchMonitor.setWatcher(new Watcher() {
    @Override
    public void onCreate(WatchEvent<?> event, Path currentPath) {
        System.out.println("创建:" + event.context());
    }
    @Override
    public void onModify(WatchEvent<?> event, Path currentPath) {
        System.out.println("修改:" + event.context());
    }
    @Override
    public void onDelete(WatchEvent<?> event, Path currentPath) {
        System.out.println("删除:" + event.context());
    }
    @Override
    public void onOverflow(WatchEvent<?> event, Path currentPath) {
        System.out.println("溢出:" + event.context());
    }
});
watchMonitor.start();

Hutool 的文件操作 API 设计简洁且功能强大,大大简化了 Java 原生的 I/O 操作代码。

相关推荐
曦月逸霜6 小时前
啥是RAG 它能干什么?
人工智能·python·机器学习
2301_769340677 小时前
如何在 Vuetify 中可靠捕获 Chip 关闭事件(包括键盘触发).txt
jvm·数据库·python
夏日听雨眠7 小时前
LInux(逻辑地址与物理地址的区别,文件描述符,lseek函数)
linux·运维·网络
南 阳8 小时前
Python从入门到精通day66
开发语言·python
为何创造硅基生物8 小时前
嵌入式 LVGL / SquareLine UI 标准命名规则(行业通用版)
windows·ui
m0_596749099 小时前
JavaScript中手动实现一个new操作符的底层逻辑
jvm·数据库·python
DTAS尺寸公差分析软件9 小时前
DTAS3D v13.0 三维尺寸公差分析软件可申请试用
python·尺寸公差分析·三维公差分析·公差仿真软件·尺寸链计算
DTAS尺寸公差分析软件9 小时前
DTAS 3D公差分析软件最新版本介绍
python·3d·尺寸公差分析·尺寸链计算·尺寸工程·尺寸链校核软件·公差仿真分析
qq_542515419 小时前
Ubuntu 22.04.4 LTS安装ToDesk最新版打不开,无响应?旧版本4.7.2_277版本分享
linux·ubuntu·todesk
火车叼位9 小时前
替代 Tiny Win10 的 Linux 方案:Debian XFCE 精简桌面搭建
linux·运维