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

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

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)
列出目录文件<br> 给定的绝对路径不能是压缩包中的路径
cn.hutool.core.io.FileUtil.isEmpty(java.io.File)
文件是否为空<br> 目录:里面没有文件时为空 文件:文件大小为0时为空
cn.hutool.core.io.FileUtil.isNotEmpty(java.io.File)
文件是否为非空<br> 目录:里面没有文件时为空 文件:文件大小为0时为空
cn.hutool.core.io.FileUtil.isDirEmpty(java.io.File)
目录是否为空
cn.hutool.core.io.FileUtil.loopFiles(java.lang.String, java.io.FileFilter)
递归遍历目录以及子目录中的所有文件<br> 如果提供file为文件,直接返回过滤结果
cn.hutool.core.io.FileUtil.loopFiles(java.io.File, java.io.FileFilter)
递归遍历目录以及子目录中的所有文件<br> 如果提供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)
递归遍历目录以及子目录中的所有文件<br> 如果提供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)
获得指定目录下所有文件名<br> 不会扫描子目录
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对象<br> 此方法会检查slip漏洞,漏洞说明见http://blog.nsfocus.net/zip-slip-2/
cn.hutool.core.io.FileUtil.file(java.io.File, java.lang.String)
创建File对象<br> 根据的路径构建文件,在Win下直接构建,在Linux下拆分路径单独构建 此方法会检查slip漏洞,漏洞说明见http://blog.nsfocus.net/zip-slip-2/
cn.hutool.core.io.FileUtil.file(java.io.File, java.lang.String[])
通过多层目录参数创建文件<br> 此方法会检查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)
计算目录或文件的总大小<br> 当给定对象为文件时,直接调用 {@link File#length()}<br> 当给定对象为目录时,遍历目录下的所有文件和目录,递归计算其大小,求和返回
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)
创建文件及其父目录,如果这个文件存在,直接返回这个文件<br> 此方法不对File对象类型做判断,如果File不存在,无法判断其类型
cn.hutool.core.io.FileUtil.touch(java.io.File)
创建文件及其父目录,如果这个文件存在,直接返回这个文件<br> 此方法不对File对象类型做判断,如果File不存在,无法判断其类型
cn.hutool.core.io.FileUtil.touch(java.io.File, java.lang.String)
创建文件及其父目录,如果这个文件存在,直接返回这个文件<br> 此方法不对File对象类型做判断,如果File不存在,无法判断其类型
cn.hutool.core.io.FileUtil.touch(java.lang.String, java.lang.String)
创建文件及其父目录,如果这个文件存在,直接返回这个文件<br> 此方法不对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)
删除文件或者文件夹<br> 路径如果为相对路径,会转换为ClassPath路径! 注意:删除文件夹时不会判断文件夹是否为空,如果不空则递归删除子文件或文件夹<br> 某个文件删除失败会终止删除操作
cn.hutool.core.io.FileUtil.del(java.io.File)
删除文件或者文件夹<br> 注意:删除文件夹时不会判断文件夹是否为空,如果不空则递归删除子文件或文件夹<br> 某个文件删除失败会终止删除操作
cn.hutool.core.io.FileUtil.clean(java.lang.String)
清空文件夹<br> 注意:清空文件夹时不会判断文件夹是否为空,如果不空则递归删除子文件或文件夹<br> 某个文件删除失败会终止删除操作
cn.hutool.core.io.FileUtil.clean(java.io.File)
清空文件夹<br> 注意:清空文件夹时不会判断文件夹是否为空,如果不空则递归删除子文件或文件夹<br> 某个文件删除失败会终止删除操作
cn.hutool.core.io.FileUtil.cleanEmpty(java.io.File)
清理空文件夹<br> 此方法用于递归删除空的文件夹,不删除文件<br> 如果传入的文件夹本身就是空的,删除这个文件夹
cn.hutool.core.io.FileUtil.mkdir(java.lang.String)
创建文件夹,如果存在直接返回此文件夹<br> 此方法不对File对象类型做判断,如果File不存在,无法判断其类型
cn.hutool.core.io.FileUtil.mkdir(java.io.File)
创建文件夹,会递归自动创建其不存在的父文件夹,如果存在直接返回此文件夹<br> 此方法不对File对象类型做判断,如果File不存在,无法判断其类型
cn.hutool.core.io.FileUtil.createTempFile(java.io.File)
创建临时文件<br> 创建后的文件名为 prefix[Randon].tmp
cn.hutool.core.io.FileUtil.createTempFile(java.io.File, boolean)
创建临时文件<br> 创建后的文件名为 prefix[Randon].tmp
cn.hutool.core.io.FileUtil.createTempFile(java.lang.String, java.lang.String, java.io.File, boolean)
创建临时文件<br> 创建后的文件名为 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)
复制文件或目录<br> 如果目标文件为目录,则将源文件以相同文件名拷贝到目标目录
cn.hutool.core.io.FileUtil.copy(java.io.File, java.io.File, boolean)
复制文件或目录<br> 情况如下:
 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)
复制文件或目录<br> 情况如下:
 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)
复制文件或目录<br> 情况如下:
 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)
修改文件或目录的文件名,不变更路径,只是简单修改文件名,不保留扩展名。<br>
 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)
修改文件或目录的文件名,不变更路径,只是简单修改文件名<br> 重命名有两种模式:<br> 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)
获取绝对路径<br> 此方法不会判定给定路径是否有效(文件或目录存在)
cn.hutool.core.io.FileUtil.getAbsolutePath(java.lang.String)
获取绝对路径,相对于ClassPath的目录<br> 如果给定就是绝对路径,则返回原路径,原路径把所有\替换为/<br> 兼容Spring风格的路径表示,例如:classpath:config/example.setting也会被识别后转换
cn.hutool.core.io.FileUtil.getAbsolutePath(java.io.File)
获取标准的绝对路径
cn.hutool.core.io.FileUtil.isAbsolutePath(java.lang.String)
给定路径已经是绝对路径<br> 此方法并没有针对路径做标准化,建议先执行{@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)
检查两个文件是否是同一个文件<br> 所谓文件相同,是指File对象是否指向同一个文件或文件夹
cn.hutool.core.io.FileUtil.contentEquals(java.io.File, java.io.File)
比较两个文件内容是否相同<br> 首先比较长度,长度一致再比较内容<br> 此方法来自Apache Commons io
cn.hutool.core.io.FileUtil.contentEqualsIgnoreEOL(java.io.File, java.io.File, java.nio.charset.Charset)
比较两个文件内容是否相同<br> 首先比较长度,长度一致再比较内容,比较内容采用按行读取,每行比较<br> 此方法来自Apache Commons io
cn.hutool.core.io.FileUtil.pathEquals(java.io.File, java.io.File)
文件路径是否相同<br> 取两个文件的绝对路径比较,在Windows下忽略大小写,在Linux下不忽略。
cn.hutool.core.io.FileUtil.lastIndexOfSeparator(java.lang.String)
获得最后一个文件路径分隔符的位置
cn.hutool.core.io.FileUtil.isModifed(java.io.File, long)
判断文件是否被改动<br> 如果文件对象为 null 或者文件不存在,被视为改动
cn.hutool.core.io.FileUtil.normalize(java.lang.String)
修复路径<br> 如果原路径尾部有分隔符,则保留为标准分隔符(/),否则不保留
  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:\foo\…\bar” =》 “C:/bar” “C:\…\bar” =》 “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)
判断文件路径是否有指定后缀,忽略大小写<br> 常用语判断扩展名
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)
转换文件编码<br> 此方法用于转换文件编码,读取的文件实际编码必须与指定的srcCharset编码一致,否则导致乱码
cn.hutool.core.io.FileUtil.convertLineSeparator(java.io.File, java.nio.charset.Charset, cn.hutool.core.io.file.LineSeparator)
转换换行符<br> 将给定文件的换行符转换为指定换行符
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路径<br> 原理是首先获取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"命令功能<br> 此方法会阻塞当前线程
cn.hutool.core.io.FileUtil.tail(java.io.File, java.nio.charset.Charset, cn.hutool.core.io.LineHandler)
文件内容跟随器,实现类似Linux下"tail -f"命令功能<br> 此方法会阻塞当前线程
cn.hutool.core.io.FileUtil.tail(java.io.File, java.nio.charset.Charset)
文件内容跟随器,实现类似Linux下"tail -f"命令功能<br> 此方法会阻塞当前线程
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: \r\n Mac: \r Linux: \n 

方法明细

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

方法描述

是否为Windows环境

支持版本及以上

3.0.9

参数描述:

参数名描述

返回值:

是否为Windows环境

参考案例:

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

image-202106074019451

源码解析:

链接:待补充

方法明细

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

方法描述

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

支持版本及以上

参数描述:

参数名描述
String path
path 目录绝对路径或者相对路径

返回值:

文件列表(包含目录)

参考案例:

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

image-202106074952759

源码解析:

链接:待补充

方法明细

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

方法描述

文件是否为空<br>
目录:里面没有文件时为空 文件:文件大小为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")));

image-202106075504227

image-202106075528252

image-202106075608730

源码解析:

链接:待补充

方法明细

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

方法描述

文件是否为非空<br> 目录:里面没有文件时为空 文件:文件大小为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)

方法描述

递归遍历目录以及子目录中的所有文件<br>
如果提供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());
		}

image-202106072351088

image-202106072426523

image-202106072440126

源码解析:

链接:待补充

方法明细

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

方法描述

递归遍历目录以及子目录中的所有文件<br>
如果提供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());
		}

image-202106082316744

源码解析:

链接:待补充

方法明细

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

方法描述

递归遍历目录以及子目录中的所有文件<br>
如果提供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());
		}

image-202106083853234

image-202106083922259

image-202106083939885

源码解析:

链接:待补充

方法明细

方法名称: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());
		}

image-202106084315574

源码解析:

链接:待补充

方法明细

方法名称: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)

方法描述

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

支持版本及以上

参数描述:

参数名描述
String path
path 相对ClassPath的目录或者绝对路径目录

返回值:

所有文件名列表

参考案例:

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

image-202106084919982

源码解析:

链接:待补充

方法明细

方法名称: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\\newFile");
		newfile.mkdirs();

目录调用 前

image-202106085104302

目录调用后

image-202106085237854

源码解析:

//懂的都懂
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());

image-20210608312439

源码解析:

链接:待补充

方法明细

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

方法描述

创建File对象<br>
此方法会检查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());

image-2021060840407

源码解析:

链接:待补充

方法明细

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

方法描述

创建File对象<br>
根据的路径构建文件,在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[])

方法描述

通过多层目录参数创建文件<br>
此方法会检查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());

image-2021060854181

源码解析:

链接:待补充

方法明细

方法名称: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());

image-202106135639625

源码解析:

链接:待补充

方法明细

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

方法描述

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

支持版本及以上

4.0.6

参数描述:

参数名描述

返回值:

临时文件路径

参考案例:

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

image-20210613527119

源码解析:

/**
	 * 获取临时文件路径(绝对路径)
	 *
	 * @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());

image-20210613818700

源码解析:

	/**
	 * 获取临时文件目录
	 *
	 * @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());

image-20210613430318

源码解析:

	/**
	 * 获取用户路径(绝对路径)
	 *
	 * @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());

image-20210613648171

源码解析:

	/**
	 * 获取用户目录
	 *
	 * @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));

image-20210613417333

源码解析:

链接:待补充

方法明细

方法名称: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));

image-202106145320664

源码解析:

在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)

方法描述

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

支持版本及以上

参数描述:

参数名描述
File file
file 目录或文件,null或者文件不存在返回0

返回值:

总大小,bytes长度

参考案例:

		//计算目录或文件的总大小(子目录,子目录的子目录也会遍历) bytes长度
		String path ="C:\\Users\\Administrator\\Desktop\\xuzhu";
		//目录
		System.out.println(FileUtil.size(new File(path)));
		//文件
		path ="C:\\Users\\Administrator\\Desktop\\xuzhu\\contentEqualsIgnoreEOLTest1.txt";
		System.out.println(FileUtil.size(new File(path)));

image-20210621051883

image-20210621124472

image-20210620856019

image-20210614238728

源码解析:

链接:待补充

方法明细

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

方法描述

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

支持版本及以上

参数描述:

参数名描述
File file
file 文件或目录
File reference
reference 参照文件

返回值:

是否晚于给定时间

参考案例:

		//文件或目录的最后修改时间是否晚于(大于)给定文件的最后修改时间
		//给定文件不存在时,文件一定比一个不存在的文件新
		File file1=new File("C:\\Users\\Administrator\\Desktop\\xuzhu\\contentEqualsIgnoreEOLTest1.txt");
		File file2=new File("C:\\Users\\Administrator\\Desktop\\xuzhu\\contentEqualsIgnoreEOLTest2.txt");
		System.out.println("file1最后修改时间"+DateUtil.date(file1.lastModified()).toString());
		System.out.println("file2最后修改时间"+DateUtil.date(file2.lastModified()).toString());
		Assert.assertEquals(Boolean.FALSE,FileUtil.newerThan(file1,file2));

image-2021061426170

源码解析:

链接:待补充

方法明细

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

方法描述

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

支持版本及以上

参数描述:

参数名描述
File file
file 文件或目录
long timeMillis
timeMillis 做为对比的时间

返回值:

是否晚于给定时间

参考案例:

		//文件或目录的最后修改时间是否晚于(大于)给定文件的最后修改时间
		//给定文件不存在时,文件一定比一个不存在的文件新
		File file1=new File("C:\\Users\\Administrator\\Desktop\\xuzhu\\contentEqualsIgnoreEOLTest1.txt");
		File file2=new File("C:\\Users\\Administrator\\Desktop\\xuzhu\\contentEqualsIgnoreEOLTest2.txt");
		System.out.println("file1最后修改时间"+DateUtil.date(file1.lastModified()).toString());
		System.out.println("file2最后修改时间"+DateUtil.date(file2.lastModified()).toString());
		Assert.assertEquals(Boolean.FALSE,FileUtil.newerThan(file1,file2.lastModified()));

源码解析:

链接:待补充

方法明细

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

方法描述

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

支持版本及以上

参数描述:

参数名描述
String fullFilePath
fullFilePath 文件的全路径,使用POSIX风格

返回值:

文件,若路径为null,返回null

参考案例:

		// fullFilePath 文件的全路径,使用POSIX风格
		//无中生有 touchTest.txt 不存在
		File file = FileUtil.touch("C:\\Users\\Administrator\\Desktop\\xuzhu\\touchTest.txt");
		Assert.assertEquals(Boolean.TRUE,FileUtil.exist(file));
		//无中生有 touchTest目录和 touchTest.txt 不存在
		file = FileUtil.touch("C:\\Users\\Administrator\\Desktop\\xuzhu\\touchTest\\touchTest.txt");
		Assert.assertEquals(Boolean.TRUE,FileUtil.exist(file));

		String path = null;
		//若路径为null,返回null
		file = FileUtil.touch(path);
		Assert.assertEquals(Boolean.FALSE,FileUtil.exist(file));

image-20210614744252

image-20210614800390

源码解析:

链接:待补充

方法明细

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

方法描述

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

支持版本及以上

参数描述:

参数名描述
File file
file 文件对象

返回值:

文件,若路径为null,返回null

参考案例:

		// fullFilePath 文件的全路径,使用POSIX风格
		//无中生有 touchTest.txt 不存在
		File file = FileUtil.touch(new File("C:\\Users\\Administrator\\Desktop\\xuzhu\\touchTest.txt"));
		Assert.assertEquals(Boolean.TRUE,FileUtil.exist(file));
		//无中生有 touchTest目录和 touchTest.txt 不存在
		file = FileUtil.touch(new File("C:\\Users\\Administrator\\Desktop\\xuzhu\\touchTest\\touchTest.txt"));
		Assert.assertEquals(Boolean.TRUE,FileUtil.exist(file));

		file = null;
		//若file为null,返回null
		file = FileUtil.touch(file);
		Assert.assertEquals(Boolean.FALSE,FileUtil.exist(file));

源码解析:

链接:待补充

方法明细

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

方法描述

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

支持版本及以上

参数描述:

参数名描述
File parent
parent 父文件对象
String path
path 文件路径

返回值:

File

参考案例:

		// fullFilePath 文件的全路径,使用POSIX风格
		//无中生有 touchTest.txt 不存在
		File file = FileUtil.touch(new File("C:\\Users\\Administrator\\Desktop\\xuzhu"),"touchTest.txt");
		Assert.assertEquals(Boolean.TRUE,FileUtil.exist(file));
		//无中生有 touchTest目录和 touchTest.txt 不存在
		file = FileUtil.touch(new File("C:\\Users\\Administrator\\Desktop\\xuzhu\\touchTest"),"touchTest.txt");
		Assert.assertEquals(Boolean.TRUE,FileUtil.exist(file));

		String path = null;
		//若路径为null,返回null
		file = FileUtil.touch(path);
		Assert.assertEquals(Boolean.FALSE,FileUtil.exist(file));

源码解析:

链接:待补充

方法明细

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

方法描述

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

支持版本及以上

参数描述:

参数名描述
String parent
parent 父文件对象
String path
path 文件路径

返回值:

File

参考案例:

		// fullFilePath 文件的全路径,使用POSIX风格
		//无中生有 touchTest.txt 不存在
		File file = FileUtil.touch("C:\\Users\\Administrator\\Desktop\\xuzhu","touchTest.txt");
		Assert.assertEquals(Boolean.TRUE,FileUtil.exist(file));
		//无中生有 touchTest目录和 touchTest.txt 不存在
		file = FileUtil.touch("C:\\Users\\Administrator\\Desktop\\xuzhu\\touchTest","touchTest.txt");
		Assert.assertEquals(Boolean.TRUE,FileUtil.exist(file));

		String path = null;
		//若路径为null,返回null
		file = FileUtil.touch(path);
		Assert.assertEquals(Boolean.FALSE,FileUtil.exist(file));

源码解析:

链接:待补充

方法明细

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

方法描述

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

支持版本及以上

参数描述:

参数名描述
File file
file 文件或目录

返回值:

父目录

参考案例:

		//创建所给文件或目录的父目录,返回父目录
		// 注:与touch差别,这个只会创建父目录,文件不会帮忙创建
		File file = FileUtil.mkParentDirs(new File("C:\\Users\\Administrator\\Desktop\\xuzhu\\mkParentDirs\\mkParentDirsTest.txt"));
		System.out.println("文件名称:"+file.getName());
		Assert.assertEquals(Boolean.TRUE,FileUtil.exist(file));

image-202106145453015

image-202106145510653

源码解析:

链接:待补充

方法明细

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

方法描述

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

支持版本及以上

参数描述:

参数名描述
String path
path 文件夹路径,使用POSIX格式,无论哪个平台

返回值:

创建的目录

参考案例:

		//创建所给文件或目录的父目录,返回父目录
		// 注:与touch差别,这个只会创建父目录,文件不会帮忙创建
		File file = FileUtil.mkParentDirs("C:\\Users\\Administrator\\Desktop\\xuzhu\\mkParentDirs\\mkParentDirsTest.txt");
		System.out.println("文件名称:"+file.getName());
		Assert.assertEquals(Boolean.TRUE,FileUtil.exist(file));

源码解析:

链接:待补充

方法明细

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

方法描述

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

支持版本及以上

参数描述:

参数名描述
String fullFileOrDirPath
fullFileOrDirPath 文件或者目录的路径

返回值:

成功与否

参考案例:

		// 删除一个不存在的文件,应返回true
		boolean result = FileUtil.del("e:/Hutool_test_3434543533409843.txt");
		Assert.assertTrue(result);

		//删除一个存在的文件,应返回true
		result = FileUtil.del("C:\\Users\\Administrator\\Desktop\\xuzhu\\delTest\\del1.txt");
		Assert.assertTrue(result);
		//删除一个存在的文件夹,应返回true
		result = FileUtil.del("C:\\Users\\Administrator\\Desktop\\xuzhu\\delTest\\");
		Assert.assertTrue(result);

image-20210615204115917

image-20210615204227835

源码解析:

链接:待补充

方法明细

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

方法描述

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

支持版本及以上

参数描述:

参数名描述
File file
file 文件对象

返回值:

成功与否

参考案例:

		// 删除一个不存在的文件,应返回true
		boolean result = FileUtil.del(new File("e:/Hutool_test_3434543533409843.txt"));
		Assert.assertTrue(result);

		//删除一个存在的文件,应返回true
		result = FileUtil.del(new File("C:\\Users\\Administrator\\Desktop\\xuzhu\\delTest\\del1.txt"));
		Assert.assertTrue(result);
		//删除一个存在的文件夹,应返回true
		result = FileUtil.del(new File("C:\\Users\\Administrator\\Desktop\\xuzhu\\delTest\\"));
		Assert.assertTrue(result);

源码解析:

链接:待补充

方法明细

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

方法描述

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

支持版本及以上

4.0.8

参数描述:

参数名描述
String dirPath
dirPath 文件夹路径

返回值:

成功与否

参考案例:

		//清空一个存在的文件夹,应返回true
		boolean result = FileUtil.clean("C:\\Users\\Administrator\\Desktop\\xuzhu\\cleanTest\\");
		Assert.assertTrue(result);

清空前

image-20210615829331

清空后

image-202106154959683

源码解析:

链接:待补充

方法明细

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

方法描述

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

支持版本及以上

3.0.6

参数描述:

参数名描述
File directory
directory 文件夹

返回值:

成功与否

参考案例:

		//清空一个存在的文件夹,应返回true
		boolean result = FileUtil.clean(new File("C:\\Users\\Administrator\\Desktop\\xuzhu\\cleanTest\\"));
		Assert.assertTrue(result);

源码解析:

链接:待补充

方法明细

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

方法描述

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

支持版本及以上

4.5.5

参数描述:

参数名描述
File directory
directory 文件夹

返回值:

成功与否

参考案例1:

		//清理空文件夹 此文件夹包含一个空文件夹,一个非空文件夹和一个文件
		boolean result = FileUtil.cleanEmpty(new File("C:\\Users\\Administrator\\Desktop\\xuzhu\\cleanEmptyTest\\"));
		Assert.assertTrue(result);

image-202106155553738

image-202106155714711

参考案例2:

		//清理空文件夹 传入的文件夹本身就是空的,删除这个文件夹
		boolean result = FileUtil.cleanEmpty(new File("C:\\Users\\Administrator\\Desktop\\xuzhu\\cleanEmptyTest1\\"));
		Assert.assertTrue(result);

image-20210615205910158

image-20210615205936694

源码解析:

链接:待补充

方法明细

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

方法描述

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

支持版本及以上

参数描述:

参数名描述
String dirPath
dirPath 文件夹路径,使用POSIX格式,无论哪个平台

返回值:

创建的目录

参考案例1:

		String path = "C:\\Users\\Administrator\\Desktop\\xuzhu\\mkdirTest\\mkdirTest1";
		//创建文件夹,会递归自动创建其不存在的父文件夹,如果存在直接返回此文件夹
		File dirFir = FileUtil.mkdir(path);
		Assert.assertEquals(Boolean.TRUE,dirFir.exists());

image-20210615235843314

image-20210615235908840

参考案例2:

		String path = "C:\\Users\\Administrator\\Desktop\\xuzhu\\mkdirTest\\mkdirTest1\\mkdirTest1.txt";
		//文件路径 最后的文件名,也会变成文件夹的名称
		File dirFir = FileUtil.mkdir(path);
		Assert.assertEquals(Boolean.TRUE,dirFir.exists());

image-20210616000250012

源码解析:

链接:待补充

方法明细

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

方法描述

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

支持版本及以上

参数描述:

参数名描述
File dir
dir 目录

返回值:

创建的目录

参考案例:

		String path = "C:\\Users\\Administrator\\Desktop\\xuzhu\\mkdirTest\\mkdirTest1";
		//创建文件夹,会递归自动创建其不存在的父文件夹,如果存在直接返回此文件夹
		File dirFir = FileUtil.mkdir(new File(path));
		Assert.assertEquals(Boolean.TRUE,dirFir.exists());

源码解析:

链接:待补充

方法明细

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

方法描述

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

支持版本及以上

参数描述:

参数名描述
File dir
dir 临时文件创建的所在目录

返回值:

临时文件

参考案例:

		String path = "C:\\Users\\Administrator\\Desktop\\xuzhu\\createTempFileTest\\";
		//创建临时文件 创建后的文件名为 hutool[Randon].tmp
		File tempFile = FileUtil.createTempFile(new File(path));
		System.out.println("Path:"+tempFile.getPath());
		System.out.println("file name:"+tempFile.getName());
		Assert.assertEquals(Boolean.TRUE,tempFile.exists());

image-20210616001140052

image-20210616001151557

源码解析:

链接:待补充

方法明细

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

方法描述

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

支持版本及以上

参数描述:

参数名描述
File dir
dir 临时文件创建的所在目录
boolean isReCreat
isReCreat 是否重新创建文件(删掉原来的,创建新的)

返回值:

临时文件

参考案例:

		String path = "C:\\Users\\Administrator\\Desktop\\xuzhu\\createTempFileTest\\";
		//创建临时文件 创建后的文件名为 hutool[Randon].tmp isReCreat 是否重新创建文件(删掉原来的,创建新的)
		File tempFile = FileUtil.createTempFile(new File(path),Boolean.TRUE);
		System.out.println("Path:"+tempFile.getPath());
		System.out.println("file name:"+tempFile.getName());
		Assert.assertEquals(Boolean.TRUE,tempFile.exists());
		tempFile = FileUtil.createTempFile(new File(path),Boolean.TRUE);
		System.out.println("Path:"+tempFile.getPath());
		System.out.println("file name:"+tempFile.getName());
		Assert.assertEquals(Boolean.TRUE,tempFile.exists());

源码解析:

链接:待补充

方法明细

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

方法描述

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

支持版本及以上

参数描述:

参数名描述
String prefix
prefix 前缀,至少3个字符
String suffix
suffix 后缀,如果null则使用默认.tmp
File dir
dir 临时文件创建的所在目录
boolean isReCreat
isReCreat 是否重新创建文件(删掉原来的,创建新的)

返回值:

临时文件

参考案例:

		String path = "C:\\Users\\Administrator\\Desktop\\xuzhu\\createTempFileTest\\";
		String prefix="xuzhu";
		String suffix=".nb";
		//创建临时文件 创建后的文件名为 hutool[Randon].tmp isReCreat 是否重新创建文件(删掉原来的,创建新的)
		File tempFile = FileUtil.createTempFile(prefix,suffix,new File(path),Boolean.TRUE);
		System.out.println("Path:"+tempFile.getPath());
		System.out.println("file name:"+tempFile.getName());
		Assert.assertEquals(Boolean.TRUE,tempFile.exists());
		tempFile = FileUtil.createTempFile(prefix,suffix,new File(path),Boolean.TRUE);
		System.out.println("Path:"+tempFile.getPath());
		System.out.println("file name:"+tempFile.getName());
		Assert.assertEquals(Boolean.TRUE,tempFile.exists());

image-20210617193230816

源码解析:

链接:待补充

方法明细

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

方法描述

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

支持版本及以上

参数描述:

参数名描述
String src
src 源文件路径
String dest
dest 目标文件或目录路径,如果为目录使用与源文件相同的文件名
java.nio.file.StandardCopyOption[] options
options {@link StandardCopyOption}

返回值:

File

参考案例1:

		//copyTest1.txt存在,copyTest2.txt不存在
		String srcPath = "C:\\Users\\Administrator\\Desktop\\xuzhu\\copyFileTest\\copyTest1.txt";
		String destPath = "C:\\Users\\Administrator\\Desktop\\xuzhu\\copyFileTest\\copyTest2.txt";
		//返回目标dest的file 复制操作
		//StandardCopyOption.COPY_ATTRIBUTES:完整复制源文件属性到新文件 注意:目标文件一定不能存在,不然会报错(FileAlreadyExistsException: ***)
		File copyFile = FileUtil.copyFile(srcPath,destPath, StandardCopyOption.COPY_ATTRIBUTES);
		Assert.assertEquals(Boolean.TRUE,copyFile.exists());

复制前:

image-202106185956182

复制后:

image-2021061850239

复制完后,再执行代码

image-20210618637417

参考案例2:

		//copyTest1.txt存在,copyTest2.txt,copyTest3.txt不存在
		String srcPath = "C:\\Users\\Administrator\\Desktop\\xuzhu\\copyFileTest1\\copyTest1.txt";
		String destPath = "C:\\Users\\Administrator\\Desktop\\xuzhu\\copyFileTest1\\copyTest2.txt";
		String destPath3 = "C:\\Users\\Administrator\\Desktop\\xuzhu\\copyFileTest1\\copyTest3.txt";
		//返回目标dest的file 复制操作
		File copyFile = FileUtil.copyFile(srcPath,destPath, StandardCopyOption.COPY_ATTRIBUTES);
		FileUtil.copyFile(srcPath,destPath3, StandardCopyOption.COPY_ATTRIBUTES);
		Assert.assertEquals(Boolean.TRUE,copyFile.exists());

		//如果目标路径已经存在(也就是copyTest2.txt文件),那么复制或者移动将失败。
		// 如果想要覆盖已经存在的目标路径,可以使用REPLACE_EXISTING选项。如果想要复制所有文件的属性,可以使用COPY_ATTRIBUTES选项。也可以同时使用两个选项
		srcPath = "C:\\Users\\Administrator\\Desktop\\xuzhu\\copyFileTest1\\copyTest1.txt";
		destPath = "C:\\Users\\Administrator\\Desktop\\xuzhu\\copyFileTest1\\copyTest2.txt";
		copyFile = FileUtil.copyFile(srcPath,destPath, StandardCopyOption.REPLACE_EXISTING);
		Assert.assertEquals(Boolean.TRUE,copyFile.exists());
		srcPath = "C:\\Users\\Administrator\\Desktop\\xuzhu\\copyFileTest1\\copyTest1.txt";
		destPath = "C:\\Users\\Administrator\\Desktop\\xuzhu\\copyFileTest1\\copyTest3.txt";
		copyFile = FileUtil.copyFile(srcPath,destPath, StandardCopyOption.REPLACE_EXISTING,StandardCopyOption.COPY_ATTRIBUTES);
		Assert.assertEquals(Boolean.TRUE,copyFile.exists());

复制前:

image-202106185208413

复制后:

image-202106185238665

image-202106185250275

参考案例3:

		//copyTest1.txt存在,copyTest2.txt不存在
		String srcPath = "C:\\Users\\Administrator\\Desktop\\xuzhu\\copyFileTest2\\copyTest1.txt";
		String destPath = "C:\\Users\\Administrator\\Desktop\\xuzhu\\copyFileTest2\\copyTest2.txt";
		//返回目标dest的file 复制操作
		//StandardCopyOption.ATOMIC_MOVE:将文件作为原子文件系统操作移动 会报错:(UnsupportedOperationException: Unsupported copy option)因为copy方法不能用这个参数
		//说到这个顺便说明下,copy支持的属性有:(详见:WindowsFileCopy.java)
		// StandardCopyOption.REPLACE_EXISTING  
		// LinkOption.NOFOLLOW_LINKS 
		// StandardCopyOption.COPY_ATTRIBUTES 
		// ExtendedCopyOption.INTERRUPTIBLE
		File copyFile = FileUtil.copyFile(srcPath,destPath, StandardCopyOption.ATOMIC_MOVE);
		Assert.assertEquals(Boolean.TRUE,copyFile.exists());

image-202106184950818

源码解析:

链接:待补充

方法明细

方法名称:cn.hutool.core.io.FileUtil.copyFile(java.io.File, java.io.File, java.nio.file.StandardCopyOption[])

方法描述

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

支持版本及以上

参数描述:

参数名描述
File src
src 源文件
File dest
dest 目标文件或目录,如果为目录使用与源文件相同的文件名
java.nio.file.StandardCopyOption[] options
options {@link StandardCopyOption}

返回值:

目标文件

参考案例:

		//copyTest1.txt存在,copyTest2.txt不存在
		String srcPath = "C:\\Users\\Administrator\\Desktop\\xuzhu\\copyFileTest3\\copyTest1.txt";
		String destPath = "C:\\Users\\Administrator\\Desktop\\xuzhu\\copyFileTest3\\copyTest2.txt";
		//返回目标dest的file 复制操作
		//StandardCopyOption.COPY_ATTRIBUTES:完整复制源文件属性到新文件 注意:目标文件一定不能存在,不然会报错(FileAlreadyExistsException: ***)
		File copyFile = FileUtil.copyFile(new File(srcPath),new File(destPath), StandardCopyOption.COPY_ATTRIBUTES);
		Assert.assertEquals(Boolean.TRUE,copyFile.exists());

image-20210618554695

源码解析:

链接:待补充

方法明细

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

方法描述

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

支持版本及以上

参数描述:

参数名描述
String srcPath
srcPath 源文件或目录
String destPath
destPath 目标文件或目录,目标不存在会自动创建(目录、文件都创建)
boolean isOverride
isOverride 是否覆盖目标文件

返回值:

目标目录或文件

参考案例:

		String srcPath = "hutool.jpg";
		String destPath = "hutool.copy.jpg";
		File destFile = FileUtil.copy(srcPath, destPath, true);
		Assert.assertTrue(destFile.exists());

image-20210618329497

源码解析:

链接:待补充

方法明细

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

方法描述

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

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

支持版本及以上

参数描述:

参数名描述
File src
src 源文件
File dest
dest 目标文件或目录,目标不存在会自动创建(目录、文件都创建)
boolean isOverride
isOverride 是否覆盖目标文件

返回值:

目标目录或文件

参考案例:

		File srcFile = FileUtil.file("hutool.jpg");
		File destFile = FileUtil.file("hutool.copy.jpg");

		FileUtil.copy(srcFile, destFile, true);

		Assert.assertTrue(destFile.exists());
		Assert.assertEquals(srcFile.length(), destFile.length());

源码解析:

链接:待补充

方法明细

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

方法描述

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

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

支持版本及以上

参数描述:

参数名描述
File src
src 源文件
File dest
dest 目标文件或目录,目标不存在会自动创建(目录、文件都创建)
boolean isOverride
isOverride 是否覆盖目标文件

返回值:

目标目录或文件

参考案例1:

		//1、src和dest都为目录,则讲src下所有文件目录拷贝到dest下
		String srcPath = "C:\\Users\\Administrator\\Desktop\\xuzhu\\copyContentTest1";
		String destPath = "C:\\Users\\Administrator\\Desktop\\xuzhu\\copyContentTest1_dest";
		//返回对象file是目标目录或文件
		FileUtil.copyContent(new File(srcPath),new File(destPath),true);

复制前

image-202106183864

复制后:目标目录如果不存在,程序会帮忙创建目录

image-202106182311326

参考案例2:

		//2、src和dest都为文件,直接复制,名字为dest
		String srcPath = "C:\\Users\\Administrator\\Desktop\\xuzhu\\copyContentTest1\\copyTest1.txt";
		String destPath = "C:\\Users\\Administrator\\Desktop\\xuzhu\\copyContentTest1\\copyTest2.txt";
		//返回对象file是目标目录或文件
		FileUtil.copyContent(new File(srcPath),new File(destPath),true);

image-20210618630549

参考案例3:

		//3、src为文件,dest为目录,将src拷贝到dest目录下
		String srcPath = "C:\\Users\\Administrator\\Desktop\\xuzhu\\copyContentTest1\\copyTest1.txt";
		//dest为目录且要存在,不然复制不会成功
		String destPath = "C:\\Users\\Administrator\\Desktop\\xuzhu\\copyContentTest3\\";
		//返回对象file是目标目录或文件
		FileUtil.copyContent(new File(srcPath),new File(destPath),true);

image-202106186219845

参考案例4:

		//1、src和dest都为目录,则讲src下所有文件目录拷贝到dest下(包含子目录,子目录会拷贝,子目录包含的文件也会拷贝)
		String srcPath = "C:\\Users\\Administrator\\Desktop\\xuzhu\\copyContentTest4";
		String destPath = "C:\\Users\\Administrator\\Desktop\\xuzhu\\copyContentTest4_dest";
		//返回对象file是目标目录或文件
		FileUtil.copyContent(new File(srcPath),new File(destPath),true);

复制前:

image-202106186715789

复制后:

image-202106186750259

源码解析:

链接:待补充

方法明细

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

方法描述

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

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

支持版本及以上

4.1.5

参数描述:

参数名描述
File src
src 源文件
File dest
dest 目标文件或目录,目标不存在会自动创建(目录、文件都创建)
boolean isOverride
isOverride 是否覆盖目标文件

返回值:

目标目录或文件

参考案例:

//1、src和dest都为目录,则讲src下所有文件(包括子目录)拷贝到dest下
		String srcPath = "C:\\Users\\Administrator\\Desktop\\xuzhu\\copyFilesFromDirTest1";
		String destPath = "C:\\Users\\Administrator\\Desktop\\xuzhu\\copyFilesFromDirTest1_dest";
		//返回对象file是目标目录或文件
		FileUtil.copyContent(new File(srcPath),new File(destPath),true);

image-202106186518416

image-2021061880016804

参考案例2:

		//1、src和dest都为目录,则讲src下所有文件(包括子目录)拷贝到dest下
		String srcPath = "C:\\Users\\Administrator\\Desktop\\xuzhu\\copyFilesFromDirTest2";
		String destPath = "C:\\Users\\Administrator\\Desktop\\xuzhu\\copyFilesFromDirTest2_dest";
		//返回对象file是目标目录或文件
		FileUtil.copyContent(new File(srcPath),new File(destPath),true);

复制前:

image-202106187102876

复制后:

image-202106187231301

源码解析:

链接:待补充

方法明细

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

方法描述

移动文件或者目录

支持版本及以上

参数描述:

参数名描述
File src
src 源文件或者目录
File target
target 目标文件或者目录
boolean isOverride
isOverride 是否覆盖目标,只有目标为文件才覆盖

返回值:

参考案例:

		//1、目录移到目录
		File srcFile = FileUtil.file("C:\\Users\\Administrator\\Desktop\\xuzhu\\moveTest");
		//目标目录不存在程序也会帮忙创建
		File destFile = FileUtil.file("C:\\Users\\Administrator\\Desktop\\xuzhu\\targetMoveTest");

		FileUtil.move(srcFile, destFile, true);

移动前:
image-202106188085317

移动后:

image-202106188080426

参考案例2:

		//2、A目录的源文件移到B目录下
		File srcFile = FileUtil.file("C:\\Users\\Administrator\\Desktop\\xuzhu\\moveTest2\\moveTest2.txt");
		//目标目录/dest为目录且要存在,不然移动不会成功,会变成文件
		File destFile = FileUtil.file("C:\\Users\\Administrator\\Desktop\\xuzhu\\targetMoveTest2\\");

		FileUtil.move(srcFile, destFile, true);

移动前:

image-20210618201315226

移动后:

image-20210618201332643

image-20210618201654204

参考案例3:

		//3、A目录的源文件移到B目录的目标文件
		File srcFile = FileUtil.file("C:\\Users\\Administrator\\Desktop\\xuzhu\\moveTest3\\moveTest3.txt");
		//目标目录不存在程序也会帮忙创建
		File destFile = FileUtil.file("C:\\Users\\Administrator\\Desktop\\xuzhu\\targetMoveTest3\\moveTest3.txt");

		FileUtil.move(srcFile, destFile, true);

移动前:

image-20210618202052171

移动后:

image-20210618202200882

image-20210618202218416

源码解析:

链接:待补充

方法明细

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

方法描述

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

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

支持版本及以上

5.3.6

参数描述:

参数名描述
File file
file 被修改的文件
String newName
newName 新的文件名,如需扩展名,需自行在此参数加上,原文件名的扩展名不会被保留
boolean isOverride
isOverride 是否覆盖目标文件

返回值:

目标文件

参考案例:

		FileUtil.rename(FileUtil.file("C:\\Users\\Administrator\\Desktop\\xuzhu\\renameTest\\hutool.jpg"), "hutool2.jpg", false);

修改前:

image-20210618204617123

修改后:

image-20210618204648120

源码解析:

链接:待补充

方法明细

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

方法描述

修改文件或目录的文件名,不变更路径,只是简单修改文件名<br>
重命名有两种模式:<br>
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
 

支持版本及以上

3.0.9

参数描述:

参数名描述
File file
file 被修改的文件
String newName
newName 新的文件名,包括扩展名
boolean isRetainExt
isRetainExt 是否保留原文件的扩展名,如果保留,则newName不需要加扩展名
boolean isOverride
isOverride 是否覆盖目标文件

返回值:

目标文件

参考案例:

		//isRetainExt 是否保留原文件的扩展名,如果保留,则newName不需要加扩展名
		FileUtil.rename(FileUtil.file("C:\\Users\\Administrator\\Desktop\\xuzhu\\renameTest3\\hutool.jpg"), "hutool2",Boolean.TRUE, false);
		FileUtil.rename(FileUtil.file("C:\\Users\\Administrator\\Desktop\\xuzhu\\renameTest3\\hutool1.jpg"), "hutool3.jpg",Boolean.FALSE, false);

修改前:

image-20210618205041105

修改后:

image-20210618205223953

源码解析:

链接:待补充

方法明细

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

方法描述

获取规范的绝对路径

支持版本及以上

4.1.4

参数描述:

参数名描述
File file
file 文件

返回值:

规范绝对路径,如果传入file为null,返回null

参考案例:

		//获取规范的绝对路径
		System.out.println(FileUtil.getCanonicalPath(new File("C:\\Users\\Administrator\\Desktop\\xuzhu\\copyTest1.txt")));
		//如果传入file为null,返回null
		File file = null;
		System.out.println(FileUtil.getCanonicalPath(file));
		//如果传入不存在路径,也是能取到的
		System.out.println(FileUtil.getCanonicalPath(new File("C:\\Users\\Administrator\\Desktop\\getCanonicalPathTest\\copyTest1.txt")));

image-20210618205724735

源码解析:

链接:待补充

方法明细

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

方法描述

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

支持版本及以上

参数描述:

参数名描述
String path
path 相对路径
java.lang.Class baseClass
baseClass 相对路径所相对的类

返回值:

绝对路径

参考案例:

			//获取绝对路径,相对于ClassPath的目录 jar包里的文件也能搜索到
		String absolutePath = FileUtil.getAbsolutePath("FileUtil.class",FileUtil.class);
		Assert.assertNotNull(absolutePath);
		System.out.println("absolutePath:"+absolutePath);	

image-20210620121909663

源码解析:

链接:待补充

方法明细

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

方法描述

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

支持版本及以上

参数描述:

参数名描述
String path
path 相对路径

返回值:

绝对路径

参考案例:

		//获取绝对路径,相对于ClassPath的目录 jar包里的文件也能搜索到
		String absolutePath = FileUtil.getAbsolutePath("LICENSE-junit.txt");
		Assert.assertNotNull(absolutePath);
		System.out.println("absolutePath:"+absolutePath);
		String absolutePath2 = FileUtil.getAbsolutePath(absolutePath);
		Assert.assertNotNull(absolutePath2);
		System.out.println("absolutePath2:"+absolutePath2);
		Assert.assertEquals(absolutePath, absolutePath2);

		String path = FileUtil.getAbsolutePath("中文.xml");
		Assert.assertTrue(path.contains("中文.xml"));
		System.out.println("path:"+path);

		path = FileUtil.getAbsolutePath("d:");
		Assert.assertEquals("d:", path);
		System.out.println("path:"+path);

image-20210620121527422

"中文.xml"这个文件是不存在的,但是路径还是可以取到“相对于ClassPath的”

image-202106207238840

源码解析:

链接:待补充

方法明细

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

方法描述

获取标准的绝对路径

支持版本及以上

参数描述:

参数名描述
File file
file 文件

返回值:

绝对路径

参考案例:

		//获取标准的绝对路径 跟getAbsolutePath(String)不一样
		String absolutePath = FileUtil.getAbsolutePath(new File("LICENSE-junit.txt"));
		Assert.assertNotNull(absolutePath);
		System.out.println("absolutePath:"+absolutePath);
		String absolutePath2 = FileUtil.getAbsolutePath(new File(absolutePath));
		Assert.assertNotNull(absolutePath2);
		System.out.println("absolutePath2:"+absolutePath2);
		Assert.assertEquals(absolutePath, absolutePath2);

		String path = FileUtil.getAbsolutePath(new File("中文.xml"));
		Assert.assertTrue(path.contains("中文.xml"));
		System.out.println("path:"+path);

		path = FileUtil.getAbsolutePath(new File("d:"));
		System.out.println("path:"+path);

image-20210620122441985

源码解析:

if (file == null) {
			return null;
		}

		try {
			return file.getCanonicalPath();
		} catch (IOException e) {
			return file.getAbsolutePath();
		}
		源码很简单,就是一个判空和直接返回file.getCanonicalPath()
将在源码解析里分析:getCanonicalPath和getAbsolutePath的区别
链接:待补充

方法明细

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

方法描述

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

支持版本及以上

参数描述:

参数名描述
String path
path 需要检查的Path

返回值:

是否已经是绝对路径

参考案例:

		//修复后的路径
		String path = FileUtil.normalize("C:\\Users\\Administrator\\Desktop\\xuzhu\\isAbsolutePathTest\\isAbsolutePathTest.txt");
		//是否已经是绝对路径
		Assert.assertEquals(Boolean.TRUE,FileUtil.isAbsolutePath(path));
		path = FileUtil.normalize("FileUtil.class");
		//是否已经是绝对路径
		Assert.assertEquals(Boolean.FALSE,FileUtil.isAbsolutePath(path));

源码解析:

链接:待补充

方法明细

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

方法描述

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

支持版本及以上

参数描述:

参数名描述
String path
path 文件路径

返回值:

如果为目录true

参考案例:

		//判断是否为目录
		String path = "C:\\Users\\Administrator\\Desktop\\xuzhu\\";
		Assert.assertEquals(Boolean.TRUE,FileUtil.isDirectory(path));
		path = null;
		Assert.assertEquals(Boolean.FALSE,FileUtil.isDirectory(path));
		path = "C:\\Users\\Administrator\\Desktop\\xuzhu\\copyTest1.txt";
		Assert.assertEquals(Boolean.FALSE,FileUtil.isDirectory(path));

源码解析:

链接:待补充

方法明细

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

方法描述

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

支持版本及以上

参数描述:

参数名描述
File file
file 文件

返回值:

如果为目录true

参考案例:

		//判断是否为目录
		String path = "C:\\Users\\Administrator\\Desktop\\xuzhu\\";
		Assert.assertEquals(Boolean.TRUE,FileUtil.isDirectory(new File(path)));
		File file = null;
		Assert.assertEquals(Boolean.FALSE,FileUtil.isDirectory(file));
		path = "C:\\Users\\Administrator\\Desktop\\xuzhu\\copyTest1.txt";
		Assert.assertEquals(Boolean.FALSE,FileUtil.isDirectory(new File(path)));

源码解析:

链接:待补充

方法明细

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

方法描述

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

支持版本及以上

参数描述:

参数名描述
String path
path 文件路径

返回值:

如果为文件true

参考案例:

		//判断是否为文件
		String path = "C:\\Users\\Administrator\\Desktop\\xuzhu\\";
		Assert.assertEquals(Boolean.FALSE,FileUtil.isFile(path));
		path = null;
		Assert.assertEquals(Boolean.FALSE,FileUtil.isFile(path));
		path = "C:\\Users\\Administrator\\Desktop\\xuzhu\\copyTest1.txt";
		Assert.assertEquals(Boolean.TRUE,FileUtil.isFile(path));

源码解析:

链接:待补充

方法明细

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

方法描述

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

支持版本及以上

参数描述:

参数名描述
File file
file 文件

返回值:

如果为文件true

参考案例:

		//判断是否为文件
		String path = "C:\\Users\\Administrator\\Desktop\\xuzhu\\";
		Assert.assertEquals(Boolean.FALSE,FileUtil.isFile(new File(path)));
		File file = null;
		Assert.assertEquals(Boolean.FALSE,FileUtil.isFile(file));
		path = "C:\\Users\\Administrator\\Desktop\\xuzhu\\copyTest1.txt";
		Assert.assertEquals(Boolean.TRUE,FileUtil.isFile(new File(path)));

源码解析:

链接:待补充

方法明细

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

方法描述

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

支持版本及以上

参数描述:

参数名描述
File file1
file1 文件1
File file2
file2 文件2

返回值:

是否相同

参考案例:

		// 源文件和目标文件都不存在
		File srcFile = FileUtil.file("d:/hutool.jpg");
		File destFile = FileUtil.file("d:/hutool.jpg");

		boolean equals = FileUtil.equals(srcFile, destFile);
		Assert.assertTrue(equals);

		// 源文件存在,目标文件不存在
		File srcFile1 = FileUtil.file("hutool.jpg");
		File destFile1 = FileUtil.file("d:/hutool.jpg");

		boolean notEquals = FileUtil.equals(srcFile1, destFile1);
		Assert.assertFalse(notEquals);

		//源文件夹和目标文件夹不存在
		File srcFile2 = FileUtil.file("C:\\Users\\Administrator\\Desktop\\xuzhu1\\");
		File destFile2 = FileUtil.file("C:\\Users\\Administrator\\Desktop\\xuzhu1\\");
		Assert.assertEquals(Boolean.TRUE,FileUtil.equals(srcFile2, destFile2));
		//源文件夹和目标文件夹是同一个,且存在
		File srcFile3 = FileUtil.file("C:\\Users\\Administrator\\Desktop\\xuzhu\\");
		File destFile3 = FileUtil.file("C:\\Users\\Administrator\\Desktop\\xuzhu\\");
		Assert.assertEquals(Boolean.TRUE,FileUtil.equals(srcFile3, destFile3));

源码解析:

链接:待补充

方法明细

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

方法描述

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

支持版本及以上

4.0.6

参数描述:

参数名描述
File file1
file1 文件1
File file2
file2 文件2

返回值:

两个文件内容一致返回true,否则false

参考案例:

		// 比较两个文件内容是否相同,不能比较两个文件夹,方法里有做判断是否是文件夹,是的话报错提示
		// 源文件存在,目标文件不存在
		File srcFile1 = FileUtil.file("hutool.jpg");
		File destFile1 = FileUtil.file("d:/hutool.jpg");
		Assert.assertEquals(Boolean.FALSE,FileUtil.contentEquals(srcFile1, destFile1));

		// 源文件存在,目标文件存在
		File srcFile2 = FileUtil.file("hutool.jpg");
		File destFile2 = FileUtil.file("hutool.jpg");
		Assert.assertEquals(Boolean.TRUE,FileUtil.contentEquals(srcFile2, destFile2));

		// 源文件存在,目标文件存在
		File srcFile3 = FileUtil.file("C:\\Users\\Administrator\\Desktop\\xuzhu\\copyTest1.txt");
		File destFile3 = FileUtil.file("C:\\Users\\Administrator\\Desktop\\xuzhu\\toCopyTest1.txt");
		Assert.assertEquals(Boolean.TRUE,FileUtil.contentEquals(srcFile3, destFile3));

源码解析:

链接:待补充

方法明细

方法名称:cn.hutool.core.io.FileUtil.contentEqualsIgnoreEOL(java.io.File, java.io.File, java.nio.charset.Charset)

方法描述

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

支持版本及以上

4.0.6

参数描述:

参数名描述
File file1
file1 文件1
File file2
file2 文件2
Charset charset
charset 编码,null表示使用平台默认编码 两个文件内容一致返回true,否则false

返回值:

是否相同

参考案例:

		// 比较两个文件内容是否相同,不能比较两个文件夹,方法里有做判断是否是文件夹,是的话报错提示
		// 源文件存在,目标文件不存在
		File srcFile1 = FileUtil.file("hutool.jpg");
		File destFile1 = FileUtil.file("d:/hutool.jpg");
		Assert.assertEquals(Boolean.FALSE,FileUtil.contentEqualsIgnoreEOL(srcFile1, destFile1, CharsetUtil.CHARSET_UTF_8));

		// 源文件存在,目标文件存在
		File srcFile2 = FileUtil.file("hutool.jpg");
		File destFile2 = FileUtil.file("hutool.jpg");
		Assert.assertEquals(Boolean.TRUE,FileUtil.contentEqualsIgnoreEOL(srcFile2, destFile2,CharsetUtil.CHARSET_UTF_8));

		// 源文件存在,目标文件存在
		File srcFile3 = FileUtil.file("C:\\Users\\Administrator\\Desktop\\xuzhu\\copyTest1.txt");
		File destFile3 = FileUtil.file("C:\\Users\\Administrator\\Desktop\\xuzhu\\toCopyTest1.txt");
		Assert.assertEquals(Boolean.TRUE,FileUtil.contentEqualsIgnoreEOL(srcFile3, destFile3,CharsetUtil.CHARSET_UTF_8));

源码解析:

链接:待补充

方法明细

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

方法描述

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

支持版本及以上

3.0.9

参数描述:

参数名描述
File file1
file1 文件1
File file2
file2 文件2

返回值:

文件路径是否相同

参考案例:

//文件路径是否相同 取两个文件的绝对路径比较 而不是文件的父目录比较
		File srcFile3 = FileUtil.file("C:\\Users\\Administrator\\Desktop\\xuzhu\\copyTest1.txt");
		File destFile3 = FileUtil.file("C:\\Users\\Administrator\\Desktop\\xuzhu\\toCopyTest1.txt");
		Assert.assertEquals(Boolean.FALSE,FileUtil.pathEquals(srcFile3, destFile3));

源码解析:

链接:待补充

方法明细

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

方法描述

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

支持版本及以上

参数描述:

参数名描述
String filePath
filePath 文件路径

返回值:

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

参考案例:

		String dir = "d:\\aaa\\bbb\\cc\\ddd";
		int index = FileUtil.lastIndexOfSeparator(dir);
		Assert.assertEquals(13, index);

		String file = "ddd.jpg";
		int index2 = FileUtil.lastIndexOfSeparator(file);
		Assert.assertEquals(-1, index2);

源码解析:

链接:待补充

方法明细

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

方法描述

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

支持版本及以上

参数描述:

参数名描述
File file
file 文件对象
long lastModifyTime
lastModifyTime 上次的改动时间

返回值:

是否被改动

参考案例:

		File srcFile = FileUtil.file("C:\\Users\\Administrator\\Desktop\\xuzhu\\copyTest1.txt");
		//判断文件是否被改动
		Assert.assertEquals(Boolean.FALSE,FileUtil.isModifed(srcFile,srcFile.lastModified()));
		Assert.assertEquals(Boolean.TRUE,FileUtil.isModifed(srcFile,DateUtil.date().getTime()));

源码解析:

链接:待补充

方法明细

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

方法描述

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

  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:\\foo\\..\\bar" =》 "C:/bar"
 "C:\\..\\bar" =》 "C:/bar"
 "~/foo/../bar/" =》 "~/bar/"
 "~/../bar" =》 "bar"
 

支持版本及以上

参数描述:

参数名描述
String path
path 原路径

返回值:

修复后的路径

参考案例:

		Assert.assertEquals("/foo/", FileUtil.normalize("/foo//"));
		Assert.assertEquals("/foo/", FileUtil.normalize("/foo/./"));
		Assert.assertEquals("/bar", FileUtil.normalize("/foo/../bar"));
		Assert.assertEquals("/bar/", FileUtil.normalize("/foo/../bar/"));
		Assert.assertEquals("/baz", FileUtil.normalize("/foo/../bar/../baz"));
		Assert.assertEquals("/", FileUtil.normalize("/../"));
		Assert.assertEquals("foo", FileUtil.normalize("foo/bar/.."));
		Assert.assertEquals("bar", FileUtil.normalize("foo/../../bar"));
		Assert.assertEquals("bar", FileUtil.normalize("foo/../bar"));
		Assert.assertEquals("/server/bar", FileUtil.normalize("//server/foo/../bar"));
		Assert.assertEquals("/bar", FileUtil.normalize("//server/../bar"));
		Assert.assertEquals("C:/bar", FileUtil.normalize("C:\\foo\\..\\bar"));
		Assert.assertEquals("C:/bar", FileUtil.normalize("C:\\..\\bar"));
		Assert.assertEquals("bar", FileUtil.normalize("../../bar"));
		Assert.assertEquals("C:/bar", FileUtil.normalize("/C:/bar"));
		Assert.assertEquals("C:", FileUtil.normalize("C:"));

		Assert.assertEquals("\\/192.168.1.1/Share/", FileUtil.normalize("\\\\192.168.1.1\\Share\\"));

源码解析:

链接:待补充

方法明细

方法名称: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
 

支持版本及以上

参数描述:

参数名描述
String rootDir
rootDir 绝对父路径
File file
file 文件

返回值:

相对子路径

参考案例:

			String subPath = FileUtil.subPath("d:/aaa/bbb/", new File("d:/aaa/bbb/ccc/"));
		Assert.assertEquals("ccc", subPath);

		subPath = FileUtil.subPath("d:/aaa/bbb", new File("d:/aaa/bbb/ccc/"));
		Assert.assertEquals("ccc", subPath);

		subPath = FileUtil.subPath("d:/aaa/bbb", new File("d:/aaa/bbb/ccc/test.txt"));
		Assert.assertEquals("ccc/test.txt", subPath);

		subPath = FileUtil.subPath("d:/aaa/bbb/", new File("d:/aaa/bbb/ccc"));
		Assert.assertEquals("ccc", subPath);

		subPath = FileUtil.subPath("d:/aaa/bbb", new File("d:/aaa/bbb/ccc"));
		Assert.assertEquals("ccc", subPath);

		subPath = FileUtil.subPath("d:/aaa/bbb", new File("d:/aaa/bbb"));
		Assert.assertEquals("", subPath);

		subPath = FileUtil.subPath("d:/aaa/bbb/", new File("d:/aaa/bbb"));
		Assert.assertEquals("", subPath);

源码解析:

链接:待补充

方法明细

方法名称: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/     =》    ""
 

支持版本及以上

参数描述:

参数名描述
String dirPath
dirPath 父路径
String filePath
filePath 文件路径

返回值:

相对子路径

参考案例:

		String subPath = FileUtil.subPath("d:/aaa/bbb/", "d:/aaa/bbb/ccc/");
		Assert.assertEquals("ccc/", subPath);

		subPath = FileUtil.subPath("d:/aaa/bbb", "d:/aaa/bbb/ccc/");
		Assert.assertEquals("ccc/", subPath);

		subPath = FileUtil.subPath("d:/aaa/bbb", "d:/aaa/bbb/ccc/test.txt");
		Assert.assertEquals("ccc/test.txt", subPath);

		subPath = FileUtil.subPath("d:/aaa/bbb/", "d:/aaa/bbb/ccc");
		Assert.assertEquals("ccc", subPath);

		subPath = FileUtil.subPath("d:/aaa/bbb", "d:/aaa/bbb/ccc");
		Assert.assertEquals("ccc", subPath);

		subPath = FileUtil.subPath("d:/aaa/bbb", "d:/aaa/bbb");
		Assert.assertEquals("", subPath);

		subPath = FileUtil.subPath("d:/aaa/bbb/", "d:/aaa/bbb");
		Assert.assertEquals("", subPath);

源码解析:

链接:待补充

方法明细

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

方法描述

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

支持版本及以上

参数描述:

参数名描述
File file
file 文件或目录
String suffix
suffix 后缀

返回值:

是否有指定后缀

参考案例:

		File srcFile = FileUtil.file("C:\\Users\\Administrator\\Desktop\\xuzhu\\copyTest1.txt");
		Assert.assertEquals(Boolean.TRUE, FileUtil.pathEndsWith(srcFile,"txt"));

源码解析:

链接:待补充

方法明细

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

方法描述

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

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

支持版本及以上

参数描述:

参数名描述
File file
file 文件 {@link File}

返回值:

类型,文件的扩展名,未找到为{@code null}

参考案例:

		//根据文件流的头部信息获得文件类型
		File file = FileUtil.file("hutool.jpg");
		String type = FileUtil.getType(file);
		Assert.assertEquals("jpg", type);

		FileTypeUtil.putFileType("ffd8ffe000104a464946", "new_jpg");
		String newType = FileUtil.getType(file);
		Assert.assertEquals("new_jpg", newType);

源码解析:

链接:待补充

方法明细

方法名称:cn.hutool.core.io.FileUtil.convertCharset(java.io.File, java.nio.charset.Charset, java.nio.charset.Charset)

方法描述

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

支持版本及以上

3.1.0

参数描述:

参数名描述
File file
file 文件
Charset srcCharset
srcCharset 原文件的编码,必须与文件内容的编码保持一致
Charset destCharset
destCharset 转码后的编码

返回值:

被转换编码的文件

参考案例:

		File srcFile = FileUtil.file("C:\\Users\\Administrator\\Desktop\\xuzhu\\copyTest1.txt");
		//转换文件编码
		File converFile = FileUtil.convertCharset(srcFile,CharsetUtil.CHARSET_UTF_8,CharsetUtil.CHARSET_GBK);
		InputStream input =  null;
		try {
			//创建流
			input =  new FileInputStream(srcFile);
			String str = IoUtil.read(input,CharsetUtil.CHARSET_GBK);
			System.out.println(str);
		} catch (IOException e) {
			//抛出一个运行时异常(直接停止掉程序)
			throw new RuntimeException("运行时异常",e);
		} finally {
			IoUtil.close(input);
		}

image-202106215717982

源码解析:

链接:待补充

方法明细

方法名称:cn.hutool.core.io.FileUtil.convertLineSeparator(java.io.File, java.nio.charset.Charset, cn.hutool.core.io.file.LineSeparator)

方法描述

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

支持版本及以上

3.1.0

参数描述:

参数名描述
File file
file 文件
Charset charset
charset 编码
LineSeparator lineSeparator
lineSeparator 换行符枚举{@link LineSeparator}

返回值:

被修改的文件

参考案例:

		File srcFile = FileUtil.file("C:\\Users\\Administrator\\Desktop\\xuzhu\\convertLineSeparatorTest.txt");
		File convertLineSeparatorFile =	FileUtil.convertLineSeparator(srcFile, CharsetUtil.CHARSET_UTF_8, LineSeparator.WINDOWS);
		InputStream input =  null;
		try {
			//创建流
			input =  new FileInputStream(convertLineSeparatorFile);
			String str = IoUtil.read(input,CharsetUtil.CHARSET_UTF_8);
			System.out.println(str);
		} catch (IOException e) {
			//抛出一个运行时异常(直接停止掉程序)
			throw new RuntimeException("运行时异常",e);
		} finally {
			IoUtil.close(input);
		}

image-2021062154426

源码解析:

链接:待补充

方法明细

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

方法描述

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

支持版本及以上

3.3.1

参数描述:

参数名描述
String fileName
fileName 文件名(必须不包括路径,否则路径符将被替换)

返回值:

清理后的文件名

参考案例:

		//清除文件名中的在Windows下不支持的非法字符,包括: \ / : * ? " &lt; &gt; |
		String fileName = "cleanInvalidTest \\ / : * ? \" < >  |.txt";
		System.out.println(FileUtil.cleanInvalid(fileName));

image-20210621454829

源码解析:

链接:待补充

方法明细

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

方法描述

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

支持版本及以上

3.3.1

参数描述:

参数名描述
String fileName
fileName 文件名(必须不包括路径,否则路径符将被替换)

返回值:

是否包含非法字符

参考案例:

		String fileName = "cleanInvalidTest \\ / : * ? \" < >  |.txt";
		//文件名中是否包含在Windows下不支持的非法字符,包括: \ / : * ? " &lt; &gt; |
		Assert.assertEquals(Boolean.TRUE, FileUtil.containsInvalid(fileName));
		fileName = "cleanInvalidTest.txt";
		Assert.assertEquals(Boolean.FALSE, FileUtil.containsInvalid(fileName));

源码解析:

链接:待补充

方法明细

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

方法描述

计算文件CRC32校验码

支持版本及以上

4.0.6

参数描述:

参数名描述
File file
file 文件,不能为目录

返回值:

CRC32值

参考案例:

		File srcFile = FileUtil.file("C:\\Users\\Administrator\\Desktop\\xuzhu\\copyTest1.txt");
		System.out.println(FileUtil.checksumCRC32(srcFile));

源码解析:

链接:待补充

方法明细

方法名称:cn.hutool.core.io.FileUtil.checksum(java.io.File, java.util.zip.Checksum)

方法描述

计算文件校验码

支持版本及以上

4.0.6

参数描述:

参数名描述
File file
file 文件,不能为目录
Checksum checksum
checksum {@link Checksum}

返回值:

Checksum

参考案例:

		File srcFile = FileUtil.file("C:\\Users\\Administrator\\Desktop\\xuzhu\\copyTest1.txt");
		System.out.println(FileUtil.checksum(srcFile,new CRC32()));

源码解析:

链接:待补充

方法明细

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

方法描述

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

支持版本及以上

4.0.13

参数描述:

参数名描述

返回值:

web root路径

参考案例:

		File webRoot = FileUtil.getWebRoot();
		Assert.assertNotNull(webRoot);
		Assert.assertEquals("hutool-core", webRoot.getName());

源码解析:

链接:待补充

方法明细

方法名称: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
 

支持版本及以上

4.1.2

参数描述:

参数名描述
String filePath
filePath 目录或文件路径
int level
level 层级

返回值:

路径File,如果不存在返回null

参考案例:

		// 只在Windows下测试
		if (FileUtil.isWindows()) {
			String parent = FileUtil.getParent("d:/aaa/bbb/cc/ddd", 0);
			Assert.assertEquals("D:\\aaa\\bbb\\cc\\ddd", parent);

			parent = FileUtil.getParent("d:/aaa/bbb/cc/ddd", 1);
			Assert.assertEquals("D:\\aaa\\bbb\\cc", parent);

			parent = FileUtil.getParent("d:/aaa/bbb/cc/ddd", 2);
			Assert.assertEquals("D:\\aaa\\bbb", parent);

			parent = FileUtil.getParent("d:/aaa/bbb/cc/ddd", 4);
			Assert.assertEquals("D:\\", parent);

			parent = FileUtil.getParent("d:/aaa/bbb/cc/ddd", 5);
			Assert.assertNull(parent);

			parent = FileUtil.getParent("d:/aaa/bbb/cc/ddd", 10);
			Assert.assertNull(parent);
		}

源码解析:

链接:待补充

方法明细

方法名称: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
 

支持版本及以上

4.1.2

参数描述:

参数名描述
File file
file 目录或文件
int level
level 层级

返回值:

路径File,如果不存在返回null

参考案例:

		// 只在Windows下测试
		if (FileUtil.isWindows()) {
			File parent = FileUtil.getParent(FileUtil.file("d:/aaa/bbb/cc/ddd"), 0);
			Assert.assertEquals(FileUtil.file("d:\\aaa\\bbb\\cc\\ddd"), parent);

			parent = FileUtil.getParent(FileUtil.file("d:/aaa/bbb/cc/ddd"), 1);
			Assert.assertEquals(FileUtil.file("d:\\aaa\\bbb\\cc"), parent);

			parent = FileUtil.getParent(FileUtil.file("d:/aaa/bbb/cc/ddd"), 2);
			Assert.assertEquals(FileUtil.file("d:\\aaa\\bbb"), parent);

			parent = FileUtil.getParent(FileUtil.file("d:/aaa/bbb/cc/ddd"), 4);
			Assert.assertEquals(FileUtil.file("d:\\"), parent);

			parent = FileUtil.getParent(FileUtil.file("d:/aaa/bbb/cc/ddd"), 5);
			Assert.assertNull(parent);

			parent = FileUtil.getParent(FileUtil.file("d:/aaa/bbb/cc/ddd"), 10);
			Assert.assertNull(parent);
		}

源码解析:

链接:待补充

方法明细

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

方法描述

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

见http://blog.nsfocus.net/zip-slip-2/ ### 支持版本及以上

参数描述:

参数名描述
File parentFile
parentFile 父文件或目录
File file
file 子文件或目录

返回值:

子文件或目录

参考案例1:

		//检查父完整路径是否为自路径的前半部分,如果不是说明不是子路径,可能存在slip注入,此方法会检查slip漏洞,漏洞说明见http://blog.nsfocus.net/zip-slip-2/
		File srcFile = FileUtil.checkSlip(new File("C:\\Users\\Administrator\\Desktop\\xuzhu"),new File("C:\\Users\\Administrator\\Desktop\\xuzhu\\contentEqualsIgnoreEOLTest1.txt"));
		Assert.assertEquals(Boolean.TRUE,srcFile.exists());

参考案例2:

		//检查父完整路径是否为自路径的前半部分,如果不是说明不是子路径,可能存在slip注入,此方法会检查slip漏洞,漏洞说明见http://blog.nsfocus.net/zip-slip-2/
		File srcFile = FileUtil.checkSlip(new File("C:\\Users\\Administrator\\Desktop\\xuzhu"),new File("contentEqualsIgnoreEOLTest1.txt"));
		//会报错IllegalArgumentException: New file is outside of the parent dir: contentEqualsIgnoreEOLTest1.txt
		Assert.assertEquals(Boolean.TRUE,srcFile.exists());

image-202106213517217

源码解析:

链接:待补充

方法明细

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

方法描述

根据文件扩展名获得MimeType

支持版本及以上

4.1.15

参数描述:

参数名描述
String filePath
filePath 文件路径或文件名

返回值:

MimeType

参考案例:

		String mimeType = FileUtil.getMimeType("test2Write.jpg");
		Assert.assertEquals("image/jpeg", mimeType);

		mimeType = FileUtil.getMimeType("test2Write.html");
		Assert.assertEquals("text/html", mimeType);

		mimeType = FileUtil.getMimeType("main.css");
		Assert.assertEquals("text/css", mimeType);

		mimeType = FileUtil.getMimeType("test.js");
		Assert.assertEquals("application/x-javascript", mimeType);

源码解析:

链接:待补充

方法明细

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

方法描述

判断是否为符号链接文件

支持版本及以上

4.4.2

参数描述:

参数名描述
File file
file 被检查的文件

返回值:

是否为符号链接文件

参考案例:

		String path = "C:\\Users\\Administrator\\Desktop\\xuzhu\\toCopyTest1.txt";
		//判断是否为符号链接文件
		Assert.assertEquals(Boolean.FALSE, FileUtil.isSymlink(new File(path)));

源码解析:

链接:待补充

方法明细

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

方法描述

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

支持版本及以上

4.5.4

参数描述:

参数名描述
File parent
parent 父目录
File sub
sub 子目录

返回值:

子目录是否为父目录的子目录

参考案例:

		File file = new File("d:/test");
		File file2 = new File("d:/test2/aaa");
		Assert.assertFalse(FileUtil.isSub(file, file2));

源码解析:

链接:待补充

方法明细

方法名称:cn.hutool.core.io.FileUtil.createRandomAccessFile(java.nio.file.Path, cn.hutool.core.io.file.FileMode)

方法描述

创建{@link RandomAccessFile}

支持版本及以上

4.5.2

参数描述:

参数名描述
Path path
path 文件Path
FileMode mode
mode 模式,见{@link FileMode}

返回值:

{@link RandomAccessFile}

参考案例:

		Path path = Paths.get("C:\\Users\\Administrator\\Desktop\\xuzhu\\toCopyTest1.txt");
		RandomAccessFile randomAccessFile = FileUtil.createRandomAccessFile(path, FileMode.r);
		Assert.assertNotNull(randomAccessFile);

源码解析:

链接:待补充
RandomAccessFile分析
FileMode分析

方法明细

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

方法描述

创建{@link RandomAccessFile}

支持版本及以上

4.5.2

参数描述:

参数名描述
File file
file 文件
FileMode mode
mode 模式,见{@link FileMode}

返回值:

{@link RandomAccessFile}

参考案例:

		RandomAccessFile randomAccessFile = FileUtil.createRandomAccessFile(new File("C:\\Users\\Administrator\\Desktop\\xuzhu\\toCopyTest1.txt"), FileMode.r);
		Assert.assertNotNull(randomAccessFile);

源码解析:

链接:待补充

方法明细

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

方法描述

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

支持版本及以上

参数描述:

参数名描述
File file
file 文件
LineHandler handler
handler 行处理器

返回值:

参考案例:

public class IoUtilLineHandler implements LineHandler {
	@Override
	public void handle(String line) {
		System.out.println("handle:"+line);
	}
}
//------------------------
	//实现类似Linux下"tail -f"命令功能 但监听启动时,toCopyTest1.txt文件有新增内容时,就会触发自定义的IoUtilLineHandler
		FileUtil.tail(FileUtil.file("C:\\Users\\Administrator\\Desktop\\xuzhu\\toCopyTest1.txt"), new IoUtilLineHandler());

监听启动前:

image-20210622634900

监听启动后:

image-20210622745033

image-20210622824152

源码解析:

链接:待补充

方法明细

方法名称:cn.hutool.core.io.FileUtil.tail(java.io.File, java.nio.charset.Charset, cn.hutool.core.io.LineHandler)

方法描述

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

支持版本及以上

参数描述:

参数名描述
File file
file 文件
Charset charset
charset 编码
LineHandler handler
handler 行处理器

返回值:

参考案例:

public class IoUtilLineHandler implements LineHandler {
	@Override
	public void handle(String line) {
		System.out.println("handle:"+line);
	}
}
//------------------------
FileUtil.tail(FileUtil.file("e:/tail.txt"), CharsetUtil.CHARSET_UTF_8,new IoUtilLineHandler());

源码解析:

链接:待补充

方法明细

方法名称:cn.hutool.core.io.FileUtil.tail(java.io.File, java.nio.charset.Charset)

方法描述

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

支持版本及以上

参数描述:

参数名描述
File file
file 文件
Charset charset
charset 编码

返回值:

参考案例:

//内置命令行打印的行处理器(在控制台打印出来)
		FileUtil.tail(FileUtil.file("e:/tail.txt"), CharsetUtil.CHARSET_GBK);

源码解析:

链接:待补充

方法明细

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

方法描述

返回文件名

支持版本及以上

4.1.13

参数描述:

参数名描述
File file
file 文件

返回值:

文件名

参考案例:

		String path = "d:\\aaa\\bbb\\cc\\ddd\\";
		String name = FileUtil.getName(new File(path));
		Assert.assertEquals("ddd", name);

		path = "d:\\aaa\\bbb\\cc\\ddd.jpg";
		name = FileUtil.getName(new File(path));
		Assert.assertEquals("ddd.jpg", name);

源码解析:

链接:待补充

方法明细

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

方法描述

返回文件名

支持版本及以上

4.1.13

参数描述:

参数名描述
String filePath
filePath 文件

返回值:

文件名

参考案例:

		String path = "d:\\aaa\\bbb\\cc\\ddd\\";
		String name = FileUtil.getName(path);
		Assert.assertEquals("ddd", name);

		path = "d:\\aaa\\bbb\\cc\\ddd.jpg";
		name = FileUtil.getName(path);
		Assert.assertEquals("ddd.jpg", name);

源码解析:

链接:待补充

方法明细

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

方法描述

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

支持版本及以上

5.3.8

参数描述:

参数名描述
File file
file 文件

返回值:

扩展名

参考案例:

		String	path = "d:\\aaa\\bbb\\cc\\ddd.jpg";
		//获取文件后缀名,扩展名不带“.”
		String suffix = FileUtil.getSuffix(new File(path));
		Assert.assertEquals("jpg", suffix);

源码解析:

链接:待补充

方法明细

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

方法描述

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

支持版本及以上

5.3.8

参数描述:

参数名描述
String fileName
fileName 文件名

返回值:

扩展名

参考案例:

		String	path = "d:\\aaa\\bbb\\cc\\ddd.jpg";
		//获取文件后缀名,扩展名不带“.”
		String suffix = FileUtil.getSuffix(path);
		Assert.assertEquals("jpg", suffix);

源码解析:

链接:待补充

方法明细

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

方法描述

返回主文件名

支持版本及以上

5.3.8

参数描述:

参数名描述
File file
file 文件

返回值:

主文件名

参考案例:

		String	path = "d:\\aaa\\bbb\\cc\\ddd.jpg";
		//返回主文件名
		String suffix = FileUtil.getPrefix(new File(path));
		Assert.assertEquals("ddd", suffix);

源码解析:

链接:待补充

方法明细

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

方法描述

返回主文件名

支持版本及以上

5.3.8

参数描述:

参数名描述
String fileName
fileName 完整文件名

返回值:

主文件名

参考案例:

		String	path = "d:\\aaa\\bbb\\cc\\ddd.jpg";
		//返回主文件名
		String suffix = FileUtil.getPrefix(path);
		Assert.assertEquals("ddd", suffix);

源码解析:

链接:待补充

方法明细

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

方法描述

返回主文件名

支持版本及以上

参数描述:

参数名描述
File file
file 文件

返回值:

主文件名

参考案例:

		String path = "d:\\aaa\\bbb\\cc\\ddd\\";
		String mainName = FileUtil.mainName(new File(path));
		Assert.assertEquals("ddd", mainName);

		path = "d:\\aaa\\bbb\\cc\\ddd";
		mainName = FileUtil.mainName(new File(path));
		Assert.assertEquals("ddd", mainName);

		path = "d:\\aaa\\bbb\\cc\\ddd.jpg";
		mainName = FileUtil.mainName(new File(path));
		Assert.assertEquals("ddd", mainName);

源码解析:

链接:待补充

方法明细

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

方法描述

返回主文件名

支持版本及以上

参数描述:

参数名描述
String fileName
fileName 完整文件名

返回值:

主文件名

参考案例:

		String path = "d:\\aaa\\bbb\\cc\\ddd\\";
		String mainName = FileUtil.mainName(path);
		Assert.assertEquals("ddd", mainName);

		path = "d:\\aaa\\bbb\\cc\\ddd";
		mainName = FileUtil.mainName(path);
		Assert.assertEquals("ddd", mainName);

		path = "d:\\aaa\\bbb\\cc\\ddd.jpg";
		mainName = FileUtil.mainName(path);
		Assert.assertEquals("ddd", mainName);

源码解析:

分析getPrefix和mainName的差别
链接:待补充

方法明细

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

方法描述

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

支持版本及以上

参数描述:

参数名描述
File file
file 文件

返回值:

扩展名

参考案例:

		String path = "d:\\aaa\\bbb\\cc\\ddd\\";
		String mainName = FileUtil.extName(new File(path));
		Assert.assertEquals("", mainName);

		path = "d:\\aaa\\bbb\\cc\\ddd";
		mainName = FileUtil.extName(new File(path));
		Assert.assertEquals("", mainName);

		path = "d:\\aaa\\bbb\\cc\\ddd.jpg";
		mainName = FileUtil.extName(new File(path));
		Assert.assertEquals("jpg", mainName);

源码解析:

链接:待补充

方法明细

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

方法描述

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

支持版本及以上

参数描述:

参数名描述
String fileName
fileName 文件名

返回值:

扩展名

参考案例:

		String path = "d:\\aaa\\bbb\\cc\\ddd\\";
		String mainName = FileUtil.extName(path);
		Assert.assertEquals("", mainName);

		path = "d:\\aaa\\bbb\\cc\\ddd";
		mainName = FileUtil.extName(path);
		Assert.assertEquals("", mainName);

		path = "d:\\aaa\\bbb\\cc\\ddd.jpg";
		mainName = FileUtil.extName(path);
		Assert.assertEquals("jpg", mainName);

源码解析:

分析extName和getSuffix的差别
链接:待补充

方法明细

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

方法描述

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

 Windows: \r\n
 Mac: \r
 Linux: \n
 

支持版本及以上

4.0.5

参数描述:

参数名描述

返回值:

换行符

参考案例:

		//获取当前系统的换行分隔符
		//* Windows: \r\n
		//* Mac: \r
		//* Linux: \n
		System.out.println("//获取当前系统的换行分隔符");
		System.out.println("//* Windows: \\r\\n");
		System.out.print(FileUtil.getLineSeparator());
		System.out.println("//* Mac: \\r");
		System.out.print(FileUtil.getLineSeparator());
		System.out.println("//* Linux: \\n");

image-202106307237264

源码解析:

链接:待补充
  • 55
    点赞
  • 79
    收藏
  • 打赏
    打赏
  • 57
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:技术工厂 设计师:CSDN官方博客 返回首页
评论 57

打赏作者

小虚竹

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值