Hutool Java工具类库-FileUtil(文件工具类)

  一、依赖:

<!--Hutool Java工具包-->
    <dependency>
       <groupId>cn.hutool</groupId>
       <artifactId>hutool-all</artifactId>
       <version>5.4.5</version>
 </dependency>

二、常用方法

Hutool 是一个 Java 工具类库,其中的 FileUtil 提供了丰富的文件操作工具方法。以下是 FileUtil 的常用方法及示例:

1. 文件/目录基本操作

创建文件

// 创建文件,如果父目录不存在也自动创建
File file = FileUtil.touch("/path/to/file.txt");

// 创建目录
FileUtil.mkdir("/path/to/dir");

判断文件类型

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

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

// 判断文件是否存在
boolean exists = FileUtil.exist("/path/to/file");

2. 文件读写操作

读取文件内容

// 读取文件为字符串(默认UTF-8编码)
String content = FileUtil.readUtf8String("/path/to/file.txt");

// 按行读取文件
List<String> lines = FileUtil.readUtf8Lines("/path/to/file.txt");

// 读取文件为字节数组
byte[] bytes = FileUtil.readBytes("/path/to/file.bin");

写入文件内容

// 写入字符串到文件(覆盖模式)
FileUtil.writeUtf8String("Hello World", "/path/to/file.txt");

// 追加内容到文件
FileUtil.appendUtf8String("Append content", "/path/to/file.txt");

// 写入字节数组到文件
FileUtil.writeBytes(bytes, "/path/to/file.bin");

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

复制文件/目录

// 复制文件
FileUtil.copy("/path/to/src.txt", "/path/to/dest.txt", true); // 第三个参数表示是否覆盖

// 复制目录
FileUtil.copyContent("/path/to/srcDir", "/path/to/destDir", true);

移动/重命名文件

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

// 重命名文件
FileUtil.rename(file, "newName.txt", true);

删除文件/目录

// 删除文件
FileUtil.del("/path/to/file.txt");

// 清空目录(不删除目录本身)
FileUtil.clean("/path/to/dir");

// 删除目录(包括子目录和文件)
FileUtil.del("/path/to/dir");

4. 文件信息获取

获取文件信息

// 获取文件扩展名
String extName = FileUtil.extName("test.txt"); // 返回 "txt"

// 获取文件名(不带扩展名)
String fileName = FileUtil.mainName("test.txt"); // 返回 "test"

// 获取文件大小
long size = FileUtil.size(file); // 返回字节数

// 获取文件最后修改时间
long lastModified = FileUtil.lastModifiedTime("/path/to/file.txt");

遍历目录

// 遍历目录下的文件和子目录
File[] files = FileUtil.ls("/path/to/dir");

// 递归遍历目录下的所有文件
List<File> fileList = FileUtil.loopFiles("/path/to/dir");

// 过滤查找文件
List<File> files = FileUtil.loopFiles("/path/to/dir", 
    pathname -> pathname.getName().endsWith(".txt"));

5. 路径操作

// 获取绝对路径
String absolutePath = FileUtil.getAbsolutePath("relative/path");

// 规范化路径(去除多余的.和..)
String normalizedPath = FileUtil.normalize("/path/to/../file.txt");

// 获取临时目录路径
File tempDir = FileUtil.getTmpDir();

// 获取用户主目录
File homeDir = FileUtil.getUserHomeDir();

6. 文件类型判断

// 判断是否为图片文件
boolean isImage = FileUtil.isImage("/path/to/image.jpg");

// 判断是否为视频文件
boolean isVideo = FileUtil.isVideo("/path/to/video.mp4");

7. 其他实用方法

// 获取文件输入流
InputStream inputStream = FileUtil.getInputStream("/path/to/file.txt");

// 获取文件输出流
OutputStream outputStream = FileUtil.getOutputStream("/path/to/file.txt");

// 获取文件Reader
BufferedReader reader = FileUtil.getUtf8Reader("/path/to/file.txt");

// 获取文件Writer
BufferedWriter writer = FileUtil.getUtf8Writer("/path/to/file.txt");

// 计算文件MD5
String md5 = FileUtil.md5("/path/to/file.txt");

三、更多实用方法详解

除了之前介绍的基本功能外,Hutool的FileUtil还提供了许多其他实用的文件操作方法。以下是更全面的方法分类和示例:

1. 文件路径处理

路径拼接与解析

// 路径拼接(自动处理路径分隔符)
String fullPath = FileUtil.normalize("/path/to" + "/" + "file.txt");

// 构建File对象(自动处理路径分隔符)
File file = FileUtil.file("/path", "to", "file.txt");

// 获取父目录
File parentDir = FileUtil.getParent("/path/to/file.txt", 1);

// 获取相对路径
String relativePath = FileUtil.subPath("/path/to", "/path/to/file.txt");

路径转换

// 转换为URL
URL url = FileUtil.getURL("/path/to/file.txt");

// 转换为URI
URI uri = FileUtil.toURI("/path/to/file.txt");

// Windows路径转Linux风格
String linuxPath = FileUtil.normalize("C:\\path\\to\\file.txt");

 

2. 文件监控

// 简单文件监听
FileUtil.watch("/path/to/dir", new SimpleFileListener(){
    @Override
    public void onModify(File file){
        System.out.println("文件被修改: " + file.getName());
    }
});

3. 文件比较与校验

// 比较文件内容是否相同
boolean isSame = FileUtil.contentEquals(file1, file2);

// 计算文件CRC32校验码
long crc32 = FileUtil.checksumCRC32("/path/to/file.txt");

// 计算文件SHA1哈希值
String sha1 = FileUtil.sha1("/path/to/file.txt");

// 计算文件SHA256哈希值
String sha256 = FileUtil.sha256("/path/to/file.txt");

4. 文件过滤与查找

// 查找指定扩展名的文件
List<File> files = FileUtil.loopFiles("/path/to/dir", 
    file -> file.getName().endsWith(".txt"));

// 查找空目录
List<File> emptyDirs = FileUtil.loopFiles("/path/to/dir", 
    File::isDirectory, 
    dir -> dir.list().length == 0);

// 查找最近修改的文件
File newestFile = FileUtil.loopFiles("/path/to/dir").stream()
    .max(Comparator.comparingLong(File::lastModified))
    .orElse(null);

5. 文件压缩与解压

// 压缩文件/目录为ZIP
File zipFile = FileUtil.zip("/path/to/source", "/path/to/target.zip");

// 解压ZIP文件
FileUtil.unzip("/path/to/source.zip", "/path/to/targetDir");

// 压缩为GZIP
File gzipFile = FileUtil.gzip("/path/to/source.txt");

// 解压GZIP
FileUtil.unGzip("/path/to/source.gz", "/path/to/target.txt");

6. 特殊文件操作

大文件处理

// 大文件逐行处理
FileUtil.readLines(file, CharsetUtil.UTF_8, line -> {
    System.out.println(line);
    return true; // 返回false可中断读取
});

// 大文件分片读取
FileUtil.readBytes(file, (bytes, length) -> {
    // 处理读取到的字节片段
    return true; // 返回false可中断读取
});

文件加锁

// 获取文件锁
FileLock lock = FileUtil.getFileLock(file);
try {
    // 操作文件
} finally {
    FileUtil.releaseFileLock(lock);
}

7. 文件编码检测与转换

// 检测文件编码
Charset charset = FileUtil.getCharset("/path/to/file.txt");

// 转换文件编码
FileUtil.convertCharset("/path/to/src.txt", 
    CharsetUtil.ISO_8859_1, 
    CharsetUtil.UTF_8, 
    "/path/to/dest.txt");

8. 系统相关文件操作

// 获取系统临时目录文件
File tmpFile = FileUtil.createTempFile();

// 获取类路径下的文件
File classpathFile = FileUtil.file(FileUtil.getClassPath());

// 获取Jar包内的文件
File jarFile = FileUtil.getJarFile(SomeClass.class);

9. 文件属性操作

// 设置文件只读
FileUtil.setReadOnly(file, true);

// 设置文件隐藏属性(Windows系统)
FileUtil.setHidden(file, true);

// 设置文件最后修改时间
FileUtil.setLastModifiedTime(file, System.currentTimeMillis());

10. 批量文件操作

// 批量重命名文件
FileUtil.rename("/path/to/dir", 
    fileName -> fileName.replace("old", "new"), 
    false); // 是否递归子目录

// 批量修改文件扩展名
FileUtil.renameExt("/path/to/dir", "txt", "bak");

11. 文件系统信息

// 获取磁盘总空间
long totalSpace = FileUtil.getTotalSpace("/");

// 获取磁盘可用空间
long freeSpace = FileUtil.getFreeSpace("/");

// 获取文件系统根目录
File[] roots = FileUtil.getRoots();

12. 特殊用途方法

文件合并与分割

// 合并多个文件
FileUtil.concat("/path/to/part1.txt", 
    "/path/to/part2.txt", 
    "/path/to/merged.txt");

// 分割文件
FileUtil.split("/path/to/largefile.txt", "/path/to/outputDir", 1024 * 1024); // 1MB每个

文件尾行读取

// 读取文件最后几行
List<String> lastLines = FileUtil.tail("/path/to/log.txt", 10);

文件差异比较

// 比较两个文件的差异
List<String> diffLines = FileUtil.diff("/path/to/file1.txt", "/path/to/file2.txt");

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值