7hutool实战FileUtil 文件工具类(100多个文件常用操作方法)

Posted 程序员超时空

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了7hutool实战FileUtil 文件工具类(100多个文件常用操作方法)相关的知识,希望对你有一定的参考价值。

如果你是小白,这套资料可以帮你成为大牛,如果你有丰富开发经验,这套资料可以帮你突破瓶颈
2022web全套视频教程前端架构 H5 vue node 小程序 视频+资料+代码+面试题.

技术活,该赏
关注+一键三连(点赞,评论,收藏)再看,养成好习惯

hutool实战(带你掌握里面的各种工具)目录

用途:文件工具类(文件常用操作)

使用场景

提供100多个文件常用操作方法,包含并不局限于:判断文件或文件夹是否为空、判断file是否为文件或文件夹、递归文件夹里的所有文件、获取指定文件夹的所有文件名、获取临时文件夹或临时文件的内容或者路径、计算文件夹或文件的总大小、创建文件或文件夹、创建临时文件或临时文件夹、删除文件或文件夹、修改文件名或文件夹名、复制文件或文件夹、移动文件或文件夹、清空文件夹、获取规范的绝对路径、比较两个文件、判断文件是否被改动、获取父路径或子路径、获取主文件名或后缀名等

项目引用

此博文的依据:hutool-5.6.5版本源码

        <dependency>
			<groupId>cn.hutool</groupId>
			<artifactId>hutool-core</artifactId>
			<version>5.6.5</version>
		</dependency>

方法摘要

方法

描述

cn.hutool.core.io.FileUtil.isWindows()

是否为Windows环境

cn.hutool.core.io.FileUtil.ls(java.lang.String)

列出目录文件
给定的绝对路径不能是压缩包中的路径

cn.hutool.core.io.FileUtil.isEmpty(java.io.File)

文件是否为空
目录:里面没有文件时为空 文件:文件大小为0时为空

cn.hutool.core.io.FileUtil.isNotEmpty(java.io.File)

文件是否为非空
目录:里面没有文件时为空 文件:文件大小为0时为空

cn.hutool.core.io.FileUtil.isDirEmpty(java.io.File)

目录是否为空

cn.hutool.core.io.FileUtil.loopFiles(java.lang.String, java.io.FileFilter)

递归遍历目录以及子目录中的所有文件
如果提供file为文件,直接返回过滤结果

cn.hutool.core.io.FileUtil.loopFiles(java.io.File, java.io.FileFilter)

递归遍历目录以及子目录中的所有文件
如果提供file为文件,直接返回过滤结果

cn.hutool.core.io.FileUtil.walkFiles(java.io.File, java.util.function.Consumer)

递归遍历目录并处理目录下的文件,可以处理目录或文件:

  • 非目录则直接调用@link Consumer处理
  • 目录则递归调用此方法处理

cn.hutool.core.io.FileUtil.loopFiles(java.io.File, int, java.io.FileFilter)

递归遍历目录以及子目录中的所有文件
如果提供file为文件,直接返回过滤结果

cn.hutool.core.io.FileUtil.loopFiles(java.lang.String)

递归遍历目录以及子目录中的所有文件

cn.hutool.core.io.FileUtil.loopFiles(java.io.File)

递归遍历目录以及子目录中的所有文件

cn.hutool.core.io.FileUtil.listFileNames(java.lang.String)

获得指定目录下所有文件名
不会扫描子目录

cn.hutool.core.io.FileUtil.newFile(java.lang.String)

创建File对象,相当于调用new File(),不做任何处理

cn.hutool.core.io.FileUtil.file(java.lang.String)

创建File对象,自动识别相对或绝对路径,相对路径将自动从ClassPath下寻找

cn.hutool.core.io.FileUtil.file(java.lang.String, java.lang.String)

创建File对象
此方法会检查slip漏洞,漏洞说明见http://blog.nsfocus.net/zip-slip-2/

cn.hutool.core.io.FileUtil.file(java.io.File, java.lang.String)

创建File对象
根据的路径构建文件,在Win下直接构建,在Linux下拆分路径单独构建 此方法会检查slip漏洞,漏洞说明见http://blog.nsfocus.net/zip-slip-2/

cn.hutool.core.io.FileUtil.file(java.io.File, java.lang.String[])

通过多层目录参数创建文件
此方法会检查slip漏洞,漏洞说明见http://blog.nsfocus.net/zip-slip-2/

cn.hutool.core.io.FileUtil.file(java.lang.String[])

通过多层目录创建文件

元素名(多层目录名)

cn.hutool.core.io.FileUtil.file(java.net.URI)

创建File对象

cn.hutool.core.io.FileUtil.file(java.net.URL)

创建File对象

cn.hutool.core.io.FileUtil.getTmpDirPath()

获取临时文件路径(绝对路径)

cn.hutool.core.io.FileUtil.getTmpDir()

获取临时文件目录

cn.hutool.core.io.FileUtil.getUserHomePath()

获取用户路径(绝对路径)

cn.hutool.core.io.FileUtil.getUserHomeDir()

获取用户目录

cn.hutool.core.io.FileUtil.exist(java.lang.String)

判断文件是否存在,如果path为null,则返回false

cn.hutool.core.io.FileUtil.exist(java.io.File)

判断文件是否存在,如果file为null,则返回false

cn.hutool.core.io.FileUtil.exist(java.lang.String, java.lang.String)

是否存在匹配文件

cn.hutool.core.io.FileUtil.lastModifiedTime(java.io.File)

指定文件最后修改时间

cn.hutool.core.io.FileUtil.lastModifiedTime(java.lang.String)

指定路径文件最后修改时间

cn.hutool.core.io.FileUtil.size(java.io.File)

计算目录或文件的总大小
当给定对象为文件时,直接调用 @link File#length()
当给定对象为目录时,遍历目录下的所有文件和目录,递归计算其大小,求和返回

cn.hutool.core.io.FileUtil.newerThan(java.io.File, java.io.File)

给定文件或目录的最后修改时间是否晚于给定时间

cn.hutool.core.io.FileUtil.newerThan(java.io.File, long)

给定文件或目录的最后修改时间是否晚于给定时间

cn.hutool.core.io.FileUtil.touch(java.lang.String)

创建文件及其父目录,如果这个文件存在,直接返回这个文件
此方法不对File对象类型做判断,如果File不存在,无法判断其类型

cn.hutool.core.io.FileUtil.touch(java.io.File)

创建文件及其父目录,如果这个文件存在,直接返回这个文件
此方法不对File对象类型做判断,如果File不存在,无法判断其类型

cn.hutool.core.io.FileUtil.touch(java.io.File, java.lang.String)

创建文件及其父目录,如果这个文件存在,直接返回这个文件
此方法不对File对象类型做判断,如果File不存在,无法判断其类型

cn.hutool.core.io.FileUtil.touch(java.lang.String, java.lang.String)

创建文件及其父目录,如果这个文件存在,直接返回这个文件
此方法不对File对象类型做判断,如果File不存在,无法判断其类型

cn.hutool.core.io.FileUtil.mkParentDirs(java.io.File)

创建所给文件或目录的父目录

cn.hutool.core.io.FileUtil.mkParentDirs(java.lang.String)

创建父文件夹,如果存在直接返回此文件夹

cn.hutool.core.io.FileUtil.del(java.lang.String)

删除文件或者文件夹
路径如果为相对路径,会转换为ClassPath路径! 注意:删除文件夹时不会判断文件夹是否为空,如果不空则递归删除子文件或文件夹
某个文件删除失败会终止删除操作

cn.hutool.core.io.FileUtil.del(java.io.File)

删除文件或者文件夹
注意:删除文件夹时不会判断文件夹是否为空,如果不空则递归删除子文件或文件夹
某个文件删除失败会终止删除操作

cn.hutool.core.io.FileUtil.clean(java.lang.String)

清空文件夹
注意:清空文件夹时不会判断文件夹是否为空,如果不空则递归删除子文件或文件夹
某个文件删除失败会终止删除操作

cn.hutool.core.io.FileUtil.clean(java.io.File)

清空文件夹
注意:清空文件夹时不会判断文件夹是否为空,如果不空则递归删除子文件或文件夹
某个文件删除失败会终止删除操作

cn.hutool.core.io.FileUtil.cleanEmpty(java.io.File)

清理空文件夹
此方法用于递归删除空的文件夹,不删除文件
如果传入的文件夹本身就是空的,删除这个文件夹

cn.hutool.core.io.FileUtil.mkdir(java.lang.String)

创建文件夹,如果存在直接返回此文件夹
此方法不对File对象类型做判断,如果File不存在,无法判断其类型

cn.hutool.core.io.FileUtil.mkdir(java.io.File)

创建文件夹,会递归自动创建其不存在的父文件夹,如果存在直接返回此文件夹
此方法不对File对象类型做判断,如果File不存在,无法判断其类型

cn.hutool.core.io.FileUtil.createTempFile(java.io.File)

创建临时文件
创建后的文件名为 prefix[Randon].tmp

cn.hutool.core.io.FileUtil.createTempFile(java.io.File, boolean)

创建临时文件
创建后的文件名为 prefix[Randon].tmp

cn.hutool.core.io.FileUtil.createTempFile(java.lang.String, java.lang.String, java.io.File, boolean)

创建临时文件
创建后的文件名为 prefix[Randon].suffix From com.jodd.io.FileUtil

cn.hutool.core.io.FileUtil.copyFile(java.lang.String, java.lang.String, java.nio.file.StandardCopyOption[])

通过JDK7+的 Files#copy(Path, Path, CopyOption…) 方法拷贝文件

cn.hutool.core.io.FileUtil.copyFile(java.io.File, java.io.File, java.nio.file.StandardCopyOption[])

通过JDK7+的 Files#copy(Path, Path, CopyOption…) 方法拷贝文件

cn.hutool.core.io.FileUtil.copy(java.lang.String, java.lang.String, boolean)

复制文件或目录
如果目标文件为目录,则将源文件以相同文件名拷贝到目标目录

cn.hutool.core.io.FileUtil.copy(java.io.File, java.io.File, boolean)

复制文件或目录
情况如下:

1、src和dest都为目录,则将src目录及其目录下所有文件目录拷贝到dest下 2、src和dest都为文件,直接复制,名字为dest 3、src为文件,dest为目录,将src拷贝到dest目录下

cn.hutool.core.io.FileUtil.copyContent(java.io.File, java.io.File, boolean)

复制文件或目录
情况如下:

1、src和dest都为目录,则讲src下所有文件目录拷贝到dest下 2、src和dest都为文件,直接复制,名字为dest 3、src为文件,dest为目录,将src拷贝到dest目录下

cn.hutool.core.io.FileUtil.copyFilesFromDir(java.io.File, java.io.File, boolean)

复制文件或目录
情况如下:

1、src和dest都为目录,则讲src下所有文件(包括子目录)拷贝到dest下 2、src和dest都为文件,直接复制,名字为dest 3、src为文件,dest为目录,将src拷贝到dest目录下

cn.hutool.core.io.FileUtil.move(java.io.File, java.io.File, boolean)

移动文件或者目录

cn.hutool.core.io.FileUtil.rename(java.io.File, java.lang.String, boolean)

修改文件或目录的文件名,不变更路径,只是简单修改文件名,不保留扩展名。

FileUtil.rename(file, “aaa.png”, true) xx/xx.png =》xx/aaa.png

cn.hutool.core.io.FileUtil.rename(java.io.File, java.lang.String, boolean, boolean)

修改文件或目录的文件名,不变更路径,只是简单修改文件名
重命名有两种模式:
1、isRetainExt为true时,保留原扩展名:

FileUtil.rename(file, “aaa”, true) xx/xx.png =》xx/aaa.png

2、isRetainExt为false时,不保留原扩展名,需要在newName中

FileUtil.rename(file, “aaa.jpg”, false) xx/xx.png =》xx/aaa.jpg

cn.hutool.core.io.FileUtil.getCanonicalPath(java.io.File)

获取规范的绝对路径

cn.hutool.core.io.FileUtil.getAbsolutePath(java.lang.String, java.lang.Class)

获取绝对路径
此方法不会判定给定路径是否有效(文件或目录存在)

cn.hutool.core.io.FileUtil.getAbsolutePath(java.lang.String)

获取绝对路径,相对于ClassPath的目录
如果给定就是绝对路径,则返回原路径,原路径把所有替换为/
兼容Spring风格的路径表示,例如:classpath:config/example.setting也会被识别后转换

cn.hutool.core.io.FileUtil.getAbsolutePath(java.io.File)

获取标准的绝对路径

cn.hutool.core.io.FileUtil.isAbsolutePath(java.lang.String)

给定路径已经是绝对路径
此方法并没有针对路径做标准化,建议先执行@link #normalize(String)方法标准化路径后判断

cn.hutool.core.io.FileUtil.isDirectory(java.lang.String)

判断是否为目录,如果path为null,则返回false

cn.hutool.core.io.FileUtil.isDirectory(java.io.File)

判断是否为目录,如果file为null,则返回false

cn.hutool.core.io.FileUtil.isFile(java.lang.String)

判断是否为文件,如果path为null,则返回false

cn.hutool.core.io.FileUtil.isFile(java.io.File)

判断是否为文件,如果file为null,则返回false

cn.hutool.core.io.FileUtil.equals(java.io.File, java.io.File)

检查两个文件是否是同一个文件
所谓文件相同,是指File对象是否指向同一个文件或文件夹

cn.hutool.core.io.FileUtil.contentEquals(java.io.File, java.io.File)

比较两个文件内容是否相同
首先比较长度,长度一致再比较内容
此方法来自Apache Commons io

cn.hutool.core.io.FileUtil.contentEqualsIgnoreEOL(java.io.File, java.io.File, java.nio.charset.Charset)

比较两个文件内容是否相同
首先比较长度,长度一致再比较内容,比较内容采用按行读取,每行比较
此方法来自Apache Commons io

cn.hutool.core.io.FileUtil.pathEquals(java.io.File, java.io.File)

文件路径是否相同
取两个文件的绝对路径比较,在Windows下忽略大小写,在Linux下不忽略。

cn.hutool.core.io.FileUtil.lastIndexOfSeparator(java.lang.String)

获得最后一个文件路径分隔符的位置

cn.hutool.core.io.FileUtil.isModifed(java.io.File, long)

判断文件是否被改动
如果文件对象为 null 或者文件不存在,被视为改动

cn.hutool.core.io.FileUtil.normalize(java.lang.String)

修复路径
如果原路径尾部有分隔符,则保留为标准分隔符(/),否则不保留

  1. 1. 统一用 /
  2. 2. 多个 / 转换为一个 /
  3. 3. 去除两边空格
  4. 4. … 和 . 转换为绝对路径,当…多于已有路径时,直接返回根路径

栗子:

“/foo//” =》 “/foo/” “/foo/./” =》 “/foo/” “/foo/…/bar” =》 “/bar” “/foo/…/bar/” =》 “/bar/” “/foo/…/bar/…/baz” =》 “/baz” “/…/” =》 “/” “foo/bar/…” =》 “foo” “foo/…/bar” =》 “bar” “foo/…/…/bar” =》 “bar” “//server/foo/…/bar” =》 “/server/bar” “//server/…/bar” =》 “/bar” “C: oo…ar” =》 “C:/bar” “C:…ar” =》 “C:/bar” “~/foo/…/bar/” =》 “~/bar/” “~/…/bar” =》 “bar”

cn.hutool.core.io.FileUtil.subPath(java.lang.String, java.io.File)

获得相对子路径

栗子:

dirPath: d:/aaa/bbb filePath: d:/aaa/bbb/ccc =》 ccc dirPath: d:/Aaa/bbb filePath: d:/aaa/bbb/ccc.txt =》 ccc.txt

cn.hutool.core.io.FileUtil.subPath(java.lang.String, java.lang.String)

获得相对子路径,忽略大小写

栗子:

dirPath: d:/aaa/bbb filePath: d:/aaa/bbb/ccc =》 ccc dirPath: d:/Aaa/bbb filePath: d:/aaa/bbb/ccc.txt =》 ccc.txt dirPath: d:/Aaa/bbb filePath: d:/aaa/bbb/ =》 “”

cn.hutool.core.io.FileUtil.pathEndsWith(java.io.File, java.lang.String)

判断文件路径是否有指定后缀,忽略大小写
常用语判断扩展名

cn.hutool.core.io.FileUtil.getType(java.io.File)

根据文件流的头部信息获得文件类型

  1、无法识别类型默认按照扩展名识别      2、xls、doc、msi头信息无法区分,按照扩展名区分      3、zip可能为docx、xlsx、pptx、jar、war头信息无法区分,按照扩展名区分 

cn.hutool.core.io.FileUtil.convertCharset(java.io.File, java.nio.charset.Charset, java.nio.charset.Charset)

转换文件编码
此方法用于转换文件编码,读取的文件实际编码必须与指定的srcCharset编码一致,否则导致乱码

cn.hutool.core.io.FileUtil.convertLineSeparator(java.io.File, java.nio.charset.Charset, cn.hutool.core.io.file.LineSeparator)

转换换行符
将给定文件的换行符转换为指定换行符

cn.hutool.core.io.FileUtil.cleanInvalid(java.lang.String)

清除文件名中的在Windows下不支持的非法字符,包括: / : * " < >

cn.hutool.core.io.FileUtil.containsInvalid(java.lang.String)

文件名中是否包含在Windows下不支持的非法字符,包括: / : * " < >

cn.hutool.core.io.FileUtil.checksumCRC32(java.io.File)

计算文件CRC32校验码

cn.hutool.core.io.FileUtil.checksum(java.io.File, java.util.zip.Checksum)

计算文件校验码

cn.hutool.core.io.FileUtil.getWebRoot()

获取Web项目下的web root路径
原理是首先获取ClassPath路径,由于在web项目中ClassPath位于 WEB-INF/classes/下,故向上获取两级目录即可。

cn.hutool.core.io.FileUtil.getParent(java.lang.String, int)

获取指定层级的父路径

getParent(“d:/aaa/bbb/cc/ddd”, 0) -》 “d:/aaa/bbb/cc/ddd” getParent(“d:/aaa/bbb/cc/ddd”, 2) -》 “d:/aaa/bbb” getParent(“d:/aaa/bbb/cc/ddd”, 4) -》 “d:/” getParent(“d:/aaa/bbb/cc/ddd”, 5) -》 null

cn.hutool.core.io.FileUtil.getParent(java.io.File, int)

获取指定层级的父路径

getParent(file(“d:/aaa/bbb/cc/ddd”, 0)) -》 “d:/aaa/bbb/cc/ddd” getParent(file(“d:/aaa/bbb/cc/ddd”, 2)) -》 “d:/aaa/bbb” getParent(file(“d:/aaa/bbb/cc/ddd”, 4)) -》 “d:/” getParent(file(“d:/aaa/bbb/cc/ddd”, 5)) -》 null

cn.hutool.core.io.FileUtil.checkSlip(java.io.File, java.io.File)

检查父完整路径是否为自路径的前半部分,如果不是说明不是子路径,可能存在slip注入。

见http://blog.nsfocus.net/zip-slip-2/

cn.hutool.core.io.FileUtil.getMimeType(java.lang.String)

根据文件扩展名获得MimeType

cn.hutool.core.io.FileUtil.isSymlink(java.io.File)

判断是否为符号链接文件

cn.hutool.core.io.FileUtil.isSub(java.io.File, java.io.File)

判断给定的目录是否为给定文件或文件夹的子目录

cn.hutool.core.io.FileUtil.createRandomAccessFile(java.nio.file.Path, cn.hutool.core.io.file.FileMode)

创建@link RandomAccessFile

cn.hutool.core.io.FileUtil.createRandomAccessFile(java.io.File, cn.hutool.core.io.file.FileMode)

创建@link RandomAccessFile

cn.hutool.core.io.FileUtil.tail(java.io.File, cn.hutool.core.io.LineHandler)

文件内容跟随器,实现类似Linux下"tail -f"命令功能
此方法会阻塞当前线程

cn.hutool.core.io.FileUtil.tail(java.io.File, java.nio.charset.Charset, cn.hutool.core.io.LineHandler)

文件内容跟随器,实现类似Linux下"tail -f"命令功能
此方法会阻塞当前线程

cn.hutool.core.io.FileUtil.tail(java.io.File, java.nio.charset.Charset)

文件内容跟随器,实现类似Linux下"tail -f"命令功能
此方法会阻塞当前线程

cn.hutool.core.io.FileUtil.getName(java.io.File)

返回文件名

cn.hutool.core.io.FileUtil.getName(java.lang.String)

返回文件名

cn.hutool.core.io.FileUtil.getSuffix(java.io.File)

获取文件后缀名,扩展名不带“.”

cn.hutool.core.io.FileUtil.getSuffix(java.lang.String)

获得文件后缀名,扩展名不带“.”

cn.hutool.core.io.FileUtil.getPrefix(java.io.File)

返回主文件名

cn.hutool.core.io.FileUtil.getPrefix(java.lang.String)

返回主文件名

cn.hutool.core.io.FileUtil.mainName(java.io.File)

返回主文件名

cn.hutool.core.io.FileUtil.mainName(java.lang.String)

返回主文件名

cn.hutool.core.io.FileUtil.extName(java.io.File)

获取文件扩展名(后缀名),扩展名不带“.”

cn.hutool.core.io.FileUtil.extName(java.lang.String)

获得文件的扩展名(后缀名),扩展名不带“.”

cn.hutool.core.io.FileUtil.getLineSeparator()

获取当前系统的换行分隔符

Windows:
Mac:
Linux:

方法明细

方法名称:cn.hutool.core.io.FileUtil.isWindows()

方法描述

是否为Windows环境

支持版本及以上

3.0.9

参数描述:

参数名

描述

返回值:

是否为Windows环境

参考案例:

if( FileUtil.isWindows())
			System.out.println("window环境");
		else
			System.out.println("其他环境");
		

源码解析:

链接:待补充

方法明细

方法名称:cn.hutool.core.io.FileUtil.ls(java.lang.String)

方法描述

列出目录文件

给定的绝对路径不能是压缩包中的路径

支持版本及以上

参数描述:

参数名

描述

String path

path 目录绝对路径或者相对路径

返回值:

文件列表(包含目录)

参考案例:

		//列出指定目录里的文件或目录 子目录里的文件不会列出来
		File[] files = FileUtil.ls("D:\\ruanjian");
		for(File file:files)
			System.out.println(file.getName());
		

源码解析:

链接:待补充

方法明细

方法名称:cn.hutool.core.io.FileUtil.isEmpty(java.io.File)

方法描述

文件是否为空

目录:里面没有文件时为空 文件:文件大小为0时为空

支持版本及以上

参数描述:

参数名

描述

File file

file 文件

返回值:

是否为空,当提供目录或文件大小为0时为true

参考案例:

		//目录:里面没有文件时为空
		//文件:文件大小为0时为空
		Assert.assertEquals(Boolean.TRUE,FileUtil.isEmpty(new File("C:\\Users\\Administrator\\Desktop\\xuzhu\\fileTest")));
		Assert.assertEquals(Boolean.FALSE,FileUtil.isEmpty(new File("C:\\Users\\Administrator\\Desktop\\xuzhu\\copyTest1.txt")));
		Assert.assertEquals(Boolean.TRUE,FileUtil.isEmpty(new File("C:\\Users\\Administrator\\Desktop\\xuzhu\\isEmptyTest.txt")));

源码解析:

链接:待补充

方法明细

方法名称:cn.hutool.core.io.FileUtil.isNotEmpty(java.io.File)

方法描述

文件是否为非空
目录:里面没有文件时为空 文件:文件大小为0时为空

支持版本及以上

参数描述:

参数名

描述

File file

file 目录

返回值:

是否为空,当提供目录或文件大小为0时为false

参考案例:

		Assert.assertEquals(Boolean.FALSE,FileUtil.isNotEmpty(new File("C:\\Users\\Administrator\\Desktop\\xuzhu\\fileTest")));
		Assert.assertEquals(Boolean.TRUE,FileUtil.isNotEmpty(new File("C:\\Users\\Administrator\\Desktop\\xuzhu\\copyTest1.txt")));
		Assert.assertEquals(Boolean.FALSE,FileUtil.isNotEmpty(new File("C:\\Users\\Administrator\\Desktop\\xuzhu\\isEmptyTest.txt")));

源码解析:

链接:待补充

方法明细

方法名称:cn.hutool.core.io.FileUtil.isDirEmpty(java.io.File)

方法描述

目录是否为空

支持版本及以上

参数描述:

参数名

描述

File dir

dir 目录

返回值:

是否为空

参考案例:

		//一定要是目录file不然会抛异常
		Assert.assertEquals(Boolean.TRUE,FileUtil.isDirEmpty(new File("C:\\Users\\Administrator\\Desktop\\xuzhu\\fileTest")));
		Assert.assertEquals(Boolean.FALSE,FileUtil.isDirEmpty(new File("C:\\Users\\Administrator\\Desktop\\xuzhu")));
		//抛异常 cn.hutool.core.io.IORuntimeException: NotDirectoryException:
		Assert.assertEquals(Boolean.FALSE,FileUtil.isDirEmpty(new File("C:\\Users\\Administrator\\Desktop\\xuzhu\\isEmptyTest.txt")));

源码解析:

链接:待补充

方法明细

方法名称:cn.hutool.core.io.FileUtil.loopFiles(java.lang.String, java.io.FileFilter)

方法描述

递归遍历目录以及子目录中的所有文件

如果提供file为文件,直接返回过滤结果

支持版本及以上

3.2.0

参数描述:

参数名

描述

String path

path 当前遍历文件或目录的路径

FileFilter fileFilter

fileFilter 文件过滤规则对象,选择要保留的文件,只对文件有效,不过滤目录

返回值:

文件列表

参考案例:

		//递归遍历目录以及子目录中的所有文件 可以加过滤条件
		List<File> files = FileUtil.loopFiles("C:\\Users\\Administrator\\Desktop\\xuzhu", new FileFilter() 
			@Override
			public boolean accept(File pathname) 
				if(pathname.getName().indexOf("to")>-1)
					return true;
				else
					return false;
				
			
		);
		for(File file:files)
			System.out.println(file.getName());
		

源码解析:

链接:待补充

方法明细

方法名称:cn.hutool.core.io.FileUtil.loopFiles(java.io.File, java.io.FileFilter)

方法描述

递归遍历目录以及子目录中的所有文件

如果提供file为文件,直接返回过滤结果

支持版本及以上

参数描述:

参数名

描述

File file

file 当前遍历文件或目录

FileFilter fileFilter

fileFilter 文件过滤规则对象,选择要保留的文件,只对文件有效,不过滤目录

返回值:

文件列表

参考案例:

		//递归遍历目录以及子目录中的所有文件 可以加过滤条件
		List<File> files = FileUtil.loopFiles(new File("C:\\Users\\Administrator\\Desktop\\xuzhu"), new FileFilter() 
			@Override
			public boolean accept(File pathname) 
				if(pathname.getName().indexOf("to")>-1)
					return true;
				else
					return false;
				
			
		);
		for(File file:files)
			System.out.println(file.getName());
		

源码解析:

链接:待补充

方法明细

方法名称:cn.hutool.core.io.FileUtil.walkFiles(java.io.File, java.util.function.Consumer)

方法描述

递归遍历目录并处理目录下的文件,可以处理目录或文件:

  • 非目录则直接调用@link Consumer处理
  • 目录则递归调用此方法处理

### 支持版本及以上 5.5.2 ### 参数描述: 参数名 | 描述 —|--- File file |

file 文件或目录,文件直接处理

java.util.function.Consumer consumer |

consumer 文件处理器,只会处理文件

返回值:

参考案例:

		List<File> files = new ArrayList<>();
				//递归遍历目录并处理目录下的文件(子目录也会遍历),可以处理目录或文件
		FileUtil.walkFiles(new File("C:\\Users\\Administrator\\Desktop\\xuzhu"), new Consumer<File>() 
			@Override
			public void accept(File file) 
				if(file.getName().indexOf("to")>-1)
					files.add(file);
				
			
		);
		for(File file:files)
			System.out.println(file.getName());
		

源码解析:

链接:待补充

方法明细

方法名称:cn.hutool.core.io.FileUtil.loopFiles(java.io.File, int, java.io.FileFilter)

方法描述

递归遍历目录以及子目录中的所有文件

如果提供file为文件,直接返回过滤结果

支持版本及以上

4.6.3

参数描述:

参数名

描述

File file

file 当前遍历文件或目录

int maxDepth

maxDepth 遍历最大深度,-1表示遍历到没有目录为止

FileFilter fileFilter

fileFilter 文件过滤规则对象,选择要保留的文件,只对文件有效,不过滤目录,null表示接收全部文件

返回值:

文件列表

参考案例:

		//递归遍历目录以及子目录中的所有文件 可以加过滤条件
		List<File> files = FileUtil.loopFiles(new File("C:\\Users\\Administrator\\Desktop\\xuzhu"),3, new FileFilter() 
			@Override
			public boolean accept(File pathname) 
				if(pathname.getName().indexOf("to")>-1)
					return true;
				else
					return false;
				
			
		);
		for(File file:files)
			System.out.println(file.getName());
		

源码解析:

链接:待补充

方法明细

方法名称:cn.hutool.core.io.FileUtil.loopFiles(java.lang.String)

方法描述

递归遍历目录以及子目录中的所有文件

支持版本及以上

3.2.0

参数描述:

参数名

描述

String path

path 当前遍历文件或目录的路径

返回值:

文件列表

参考案例:

		//递归遍历目录以及子目录中的所有文件
		List<File> files = FileUtil.loopFiles("C:\\Users\\Administrator\\Desktop\\xuzhu");
		for(File file:files)
			System.out.println(file.getName());
		

源码解析:

链接:待补充

方法明细

方法名称:cn.hutool.core.io.FileUtil.loopFiles(java.io.File)

方法描述

递归遍历目录以及子目录中的所有文件

支持版本及以上

参数描述:

参数名

描述

File file

file 当前遍历文件

返回值:

文件列表

参考案例:

		//递归遍历目录以及子目录中的所有文件
		List<File> files = FileUtil.loopFiles(new File("C:\\Users\\Administrator\\Desktop\\xuzhu"));
		for(File file:files)
			System.out.println(file.getName());
		

源码解析:

链接:待补充

方法明细

方法名称:cn.hutool.core.io.FileUtil.listFileNames(java.lang.String)

方法描述

获得指定目录下所有文件名

不会扫描子目录

支持版本及以上

参数描述:

参数名

描述

String path

path 相对ClassPath的目录或者绝对路径目录

返回值:

所有文件名列表

参考案例:

		//获得指定目录下所有文件名 不会扫描子目录
		List<String> paths = FileUtil.listFileNames("C:\\Users\\Administrator\\Desktop\\xuzhu");
		for(String path:paths)
			System.out.println(path);
		

源码解析:

链接:待补充

方法明细

方法名称:cn.hutool.core.io.FileUtil.newFile(java.lang.String)

方法描述

创建File对象,相当于调用new File(),不做任何处理

支持版本及以上

4.1.4

参数描述:

参数名

描述

String path

path 文件路径

返回值:

File

参考案例:

		//创建File对象,相当于调用new File(),不做任何处理
		File newfile = FileUtil.newFile("C:\\Users\\Administrator\\Desktop\\xuzhu

ewFile");
newfile.mkdirs();

目录调用 前

目录调用后

源码解析:

//懂的都懂
public static File newFile(String path) 
		return new File(path);
	

方法明细

方法名称:cn.hutool.core.io.FileUtil.file(java.lang.String)

方法描述

创建File对象,自动识别相对或绝对路径,相对路径将自动从ClassPath下寻找

支持版本及以上

参数描述:

参数名

描述

String path

path 文件路径

返回值:

File

参考案例:

		//创建File对象,自动识别相对或绝对路径,相对路径将自动从ClassPath下寻找
		File srcFile = FileUtil.file("hutool.jpg");
		Assert.assertEquals(Boolean.TRUE,srcFile.exists());
		srcFile = FileUtil.file("C:\\Users\\Administrator\\Desktop\\xuzhu\\contentEqualsIgnoreEOLTest1.txt");
		Assert.assertEquals(Boolean.TRUE,srcFile.exists());

源码解析:

链接:待补充

方法明细

方法名称:cn.hutool.core.io.FileUtil.file(java.lang.String, java.lang.String)

方法描述

创建File对象

此方法会检查slip漏洞,漏洞说明见http://blog.nsfocus.net/zip-slip-2/

支持版本及以上

参数描述:

参数名

描述

String parent

parent 父目录

String path

path 文件路径

返回值:

File

参考案例:

		//创建File对象,此方法会检查slip漏洞,漏洞说明见http://blog.nsfocus.net/zip-slip-2/
		File srcFile = FileUtil.file("C:\\Users\\Administrator\\Desktop\\xuzhu","contentEqualsIgnoreEOLTest1.txt");
		Assert.assertEquals(Boolean.TRUE,srcFile.exists());
		//莫须有的父目录,应该找不到此文件
		srcFile = FileUtil.file("C:\\Users\\Administrator\\Desktop\\xuzhu\\aaa","contentEqualsIgnoreEOLTest1.txt");
		Assert.assertEquals(Boolean.FALSE,srcFile.exists());

源码解析:

链接:待补充

方法明细

方法名称:cn.hutool.core.io.FileUtil.file(java.io.File, java.lang.String)

方法描述

创建File对象

根据的路径构建文件,在Win下直接构建,在Linux下拆分路径单独构建
此方法会检查slip漏洞,漏洞说明见http://blog.nsfocus.net/zip-slip-2/

支持版本及以上

参数描述:

参数名

描述

File parent

parent 父文件对象

String path

path 文件路径

返回值:

File

参考案例:

		//创建File对象,此方法会检查slip漏洞,漏洞说明见http://blog.nsfocus.net/zip-slip-2/
		File srcFile = FileUtil.file(new File("C:\\Users\\Administrator\\Desktop\\xuzhu"),"contentEqualsIgnoreEOLTest1.txt");
		Assert.assertEquals(Boolean.TRUE,srcFile.exists());
		//莫须有的父目录,应该找不到此文件
		srcFile = FileUtil.file(new File("C:\\Users\\Administrator\\Desktop\\xuzhu\\aaa"),"contentEqualsIgnoreEOLTest1.txt");
		Assert.assertEquals(Boolean.FALSE,srcFile.exists());

源码解析:

链接:待补充

方法明细

方法名称:cn.hutool.core.io.FileUtil.file(java.io.File, java.lang.String[])

方法描述

通过多层目录参数创建文件

此方法会检查slip漏洞,漏洞说明见http://blog.nsfocus.net/zip-slip-2/

支持版本及以上

4.0.6

参数描述:

参数名

描述

File directory

directory 父目录

java.lang.String[] names

names 元素名(多层目录名),由外到内依次传入

返回值:

the file 文件

参考案例:

		//创建File对象,此方法会检查slip漏洞,漏洞说明见http://blog.nsfocus.net/zip-slip-2/
		File srcFile = FileUtil.file("C:\\Users\\Administrator\\Desktop\\xuzhu","loopFileTest","loopFileTest1","toLoopFlie1.txt");
		Assert.assertEquals(Boolean.TRUE,srcFile.exists());

源码解析:

链接:待补充

方法明细

方法名称:cn.hutool.core.io.FileUtil.file(java.lang.String[])

方法描述

通过多层目录创建文件

元素名(多层目录名) ### 支持版本及以上 4.0.6 ### 参数描述: 参数名 | 描述 —|--- java.lang.String[] names |

names 多层文件的文件名,由外到内依次传入

返回值:

the file 文件

参考案例:

		//创建File对象,多层文件的文件名,由外到内依次传入
		File srcFile = FileUtil.file("C:","Users","Administrator","Desktop","xuzhu","loopFileTest","loopFileTest1","toLoopFlie1.txt");
		Assert.assertEquals(Boolean.TRUE,srcFile.exists());
		srcFile = FileUtil.file("C:","Users","Administrator","Desktop","xuzhu_nb","loopFileTest","loopFileTest1","toLoopFlie1.txt");
		Assert.assertEquals(Boolean.FALSE,srcFile.exists());

源码解析:

链接:待补充

方法明细

方法名称:cn.hutool.core.io.FileUtil.file(java.net.URI)

方法描述

创建File对象

支持版本及以上

参数描述:

参数名

描述

URI uri

uri 文件URI

返回值:

File

参考案例:

		File srcFile = new File("C:\\Users\\Administrator\\Desktop\\xuzhu\\contentEqualsIgnoreEOLTest1.txt");
		try 
			srcFile = FileUtil.file(srcFile.toURI());
		 catch (NullPointerException e) 
			e.printStackTrace();
		
		Assert.assertEquals(Boolean.TRUE,srcFile.exists());

源码解析:

链接:待补充

方法明细

方法名称:cn.hutool.core.io.FileUtil.file(java.net.URL)

方法描述

创建File对象

支持版本及以上

参数描述:

参数名

描述

URL url

url 文件URL

返回值:

File

参考案例:

		File srcFile = null;
		File file=new File("C:\\Users\\Administrator\\Desktop\\xuzhu\\contentEqualsIgnoreEOLTest1.txt");
		try 
			URL url = file.toURI().toURL();
			System.out.println("url:"+url);
			srcFile = FileUtil.file(url);
		 catch (Exception e) 
			e.printStackTrace();
		
		Assert.assertEquals(Boolean.TRUE,srcFile.exists());

源码解析:

链接:待补充

方法明细

方法名称:cn.hutool.core.io.FileUtil.getTmpDirPath()

方法描述

获取临时文件路径(绝对路径)

支持版本及以上

4.0.6

参数描述:

参数名

描述

返回值:

临时文件路径

参考案例:

		//获取临时文件路径(绝对路径)(当前电脑的临时文件路径)
		System.out.println("临时文件路径:"+FileUtil.getTmpDirPath());

源码解析:

/**
	 * 获取临时文件路径(绝对路径)
	 *
	 * @return 临时文件路径
	 * @since 4.0.6
	 */
	public static String getTmpDirPath() 
		return System.getProperty("java.io.tmpdir");
	

方法明细

方法名称:cn.hutool.core.io.FileUtil.getTmpDir()

方法描述

获取临时文件目录

支持版本及以上

4.0.6

参数描述:

参数名

描述

返回值:

临时文件目录

参考案例:

		//获取临时文件目录
		File temFile = FileUtil.getTmpDir();
		System.out.println("临时文件目录:"+temFile.getPath());
		Assert.assertEquals(Boolean.TRUE,temFile.exists());

源码解析:

	/**
	 * 获取临时文件目录
	 *
	 * @return 临时文件目录
	 * @since 4.0.6
	 */
	public static File getTmpDir() 
		return file(getTmpDirPath());
	

方法明细

方法名称:cn.hutool.core.io.FileUtil.getUserHomePath()

方法描述

获取用户路径(绝对路径)

支持版本及以上

4.0.6

参数描述:

参数名

描述

返回值:

用户路径

参考案例:

		//获取用户路径(绝对路径)
		System.out.println("获取用户路径(绝对路径):"+FileUtil.getUserHomePath());

源码解析:

	/**
	 * 获取用户路径(绝对路径)
	 *
	 * @return 用户路径
	 * @since 4.0.6
	 */
	public static String getUserHomePath() 
		return System.getProperty("user.home");
	

方法明细

方法名称:cn.hutool.core.io.FileUtil.getUserHomeDir()

方法描述

获取用户目录

支持版本及以上

4.0.6

参数描述:

参数名

描述

返回值:

用户目录

参考案例:

		//获取用户目录
		File userHomeDir = FileUtil.getUserHomeDir();
		System.out.println("用户目录:"+userHomeDir.getPath());
		Assert.assertEquals(Boolean.TRUE,userHomeDir.exists());

源码解析:

	/**
	 * 获取用户目录
	 *
	 * @return 用户目录
	 * @since 4.0.6
	 */
	public static File getUserHomeDir() 
		return file(getUserHomePath());
	

方法明细

方法名称:cn.hutool.core.io.FileUtil.exist(java.lang.String)

方法描述

判断文件是否存在,如果path为null,则返回false

支持版本及以上

参数描述:

参数名

描述

String path

path 文件路径

返回值:

如果存在返回true

参考案例:

		String path ="C:\\Users\\Administrator\\Desktop\\xuzhu";
		Assert.assertEquals(Boolean.TRUE,FileUtil.exist(path));
		//不存在的路径
		Assert.assertEquals(Boolean.FALSE,FileUtil.exist(path+"123"));
		path = null;
		Assert.assertEquals(Boolean.FALSE,FileUtil.exist(path));

		//相比于file.exists()优势,多了路径的判空处理
		//下面会抛出空指针 NullPointerException
		File file = new File(path);
		Assert.assertEquals(Boolean.FALSE,file.exists());

源码解析:

	//代码很清晰,就是在原先的file.exists()基础上,加了路径的判空处理
	/**
	 * 判断文件是否存在,如果path为null,则返回false
	 *
	 * @param path 文件路径
	 * @return 如果存在返回true
	 */
	public static boolean exist(String path) 
		return (null != path) && file(path).exists();
	

方法明细

方法名称:cn.hutool.core.io.FileUtil.exist(java.io.File)

方法描述

判断文件是否存在,如果file为null,则返回false

支持版本及以上

参数描述:

参数名

描述

File file

file 文件

返回值:

如果存在返回true

参考案例:

		String path ="C:\\Users\\Administrator\\Desktop\\xuzhu";
		File file = new File(path);
		Assert.assertEquals(Boolean.TRUE,FileUtil.exist(file));
		//不存在的路径
		file = new File(path+"123");
		Assert.assertEquals(Boolean.FALSE,FileUtil.exist(file));
		file = null;
		Assert.assertEquals(Boolean.FALSE,FileUtil.exist(file));

源码解析:

	/**
	 * 判断文件是否存在,如果file为null,则返回false
	 *
	 * @param file 文件
	 * @return 如果存在返回true
	 */
	public static boolean exist(File file) 
		return (null != file) && file.exists();
	

方法明细

方法名称:cn.hutool.core.io.FileUtil.exist(java.lang.String, java.lang.String)

方法描述

是否存在匹配文件

支持版本及以上

参数描述:

参数名

描述

String directory

directory 文件夹路径

String regexp

regexp 文件夹中所包含文件名的正则表达式

返回值:

如果存在匹配文件返回true

参考案例:

		String path ="C:\\Users\\Administrator\\Desktop\\xuzhu";
		//通过匹配文件名正则公式,判断是否存在匹配文件
		String regexp =  "contentEqualsIgnoreEOLTest(.*)";
		Assert.assertEquals(Boolean.TRUE,FileUtil.exist(path,regexp));

源码解析:

链接:待补充

方法明细

方法名称:cn.hutool.core.io.FileUtil.lastModifiedTime(java.io.File)

方法描述

指定文件最后修改时间

支持版本及以上

参数描述:

参数名

描述

File file

file 文件

返回值:

最后修改时间

参考案例:

		File file=new File("C:\\Users\\Administrator\\Desktop\\xuzhu\\contentEqualsIgnoreEOLTest1.txt");
		Date lastModifiedTime = FileUtil.lastModifiedTime(file);
		System.out.println(DateUtil.formatDateTime(lastModifiedTime));

源码解析:

在file.lastModified()的基础上,增加了file为null的判断
/**
	 * 指定文件最后修改时间
	 *
	 * @param file 文件
	 * @return 最后修改时间
	 */
	public static Date lastModifiedTime(File file) 
		if (false == exist(file)) 
			return null;
		

		return new Date(file.lastModified());
	

方法明细

方法名称:cn.hutool.core.io.FileUtil.lastModifiedTime(java.lang.String)

方法描述

指定路径文件最后修改时间

支持版本及以上

参数描述:

参数名

描述

String path

path 绝对路径

返回值:

最后修改时间

参考案例:

		String path ="C:\\Users\\Administrator\\Desktop\\xuzhu\\contentEqualsIgnoreEOLTest1.txt";
		Date lastModifiedTime = FileUtil.lastModifiedTime(path);
		System.out.println(DateUtil.formatDateTime(lastModifiedTime));

源码解析:

链接:待补充

方法明细

方法名称:cn.hutool.core.io.FileUtil.size(java.io.File)

方法描述

计算目录或文件的总大小

当给定对象为文件时,直接调用 @link File#length()

当给定对象为目录时,遍历目录下的所有文件和目录,递归计算其大小,求和返回

支持版本及以上

参数描述:

参数名

描述

File file

file 目录或文件,null或者文件不存在返回0

返回值:

总大小,bytes长度

参考案例:

以上是关于7hutool实战FileUtil 文件工具类(100多个文件常用操作方法)的主要内容,如果未能解决你的问题,请参考以下文章

7hutool实战FileUtil 文件工具类(100多个文件常用操作方法)

9hutool实战:FileUtil 文件工具类(读取文件)

9hutool实战:FileUtil 文件工具类(读取文件)

11hutool实战:FileUtil 文件工具类(写入,追加文件)

11hutool实战:FileUtil 文件工具类(写入,追加文件)

7hutool实战:DateUtil(时间工具类)-日期计算