技术活,该赏 关注+一键三连(点赞,评论,收藏)再看,养成好习惯
hutool实战(带你掌握里面的各种工具)目录
用途:文件工具类(文件常用操作) 使用场景提供100多个文件常用操作方法,包含并不局限于:判断文件或文件夹是否为空、判断file是否为文件或文件夹、递归文件夹里的所有文件、获取指定文件夹的所有文件名、获取临时文件夹或临时文件的内容或者路径、计算文件夹或文件的总大小、创建文件或文件夹、创建临时文件或临时文件夹、删除文件或文件夹、修改文件名或文件夹名、复制文件或文件夹、移动文件或文件夹、清空文件夹、获取规范的绝对路径、比较两个文件、判断文件是否被改动、获取父路径或子路径、获取主文件名或后缀名等
项目引用此博文的依据:hutool-5.6.5版本源码
方法摘要cn.hutool hutool-core 5.6.5
| 方法 | 描述 |
|---|---|
| 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) |
递归遍历目录并处理目录下的文件,可以处理目录或文件:
|
| 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) |
修复路径 如果原路径尾部有分隔符,则保留为标准分隔符(/),否则不保留
栗子: “/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) |
判断文件路径是否有指定后缀,忽略大小写 常用语判断扩展名 |
| 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: rn Mac: r Linux: n |
是否为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源码解析: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源码解析: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}处理
- 目录则递归调用此方法处理
List源码解析:files = new ArrayList<>(); //递归遍历目录并处理目录下的文件(子目录也会遍历),可以处理目录或文件 FileUtil.walkFiles(new File("C:\Users\Administrator\Desktop\xuzhu"), new Consumer () { @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源码解析: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源码解析: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源码解析: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源码解析: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\newFile");
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());
源码解析:
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());
源码解析:
public static File getTmpDir() {
return file(getTmpDirPath());
}
方法明细
方法名称:cn.hutool.core.io.FileUtil.getUserHomePath()
方法描述
获取用户路径(绝对路径)
支持版本及以上4.0.6
参数描述:| 参数名 | 描述 |
|---|
用户路径
参考案例: //获取用户路径(绝对路径)
System.out.println("获取用户路径(绝对路径):"+FileUtil.getUserHomePath());
源码解析:
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());
源码解析:
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()基础上,加了路径的判空处理
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));源码解析:
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的判断
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长度
参考案例://计算目录或文件的总大小(子目录,子目录的子目录也会遍历) 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)));源码解析:
链接:待补充方法明细 方法名称: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));
源码解析:
链接:待补充方法明细 方法名称: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) 方法描述
创建文件及其父目录,如果这个文件存在,直接返回这个文件
此方法不对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));
源码解析:
链接:待补充方法明细 方法名称:cn.hutool.core.io.FileUtil.touch(java.io.File) 方法描述
创建文件及其父目录,如果这个文件存在,直接返回这个文件
此方法不对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) 方法描述
创建文件及其父目录,如果这个文件存在,直接返回这个文件
此方法不对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) 方法描述
创建文件及其父目录,如果这个文件存在,直接返回这个文件
此方法不对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));
源码解析:
链接:待补充方法明细 方法名称: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) 方法描述
删除文件或者文件夹
路径如果为相对路径,会转换为ClassPath路径! 注意:删除文件夹时不会判断文件夹是否为空,如果不空则递归删除子文件或文件夹
某个文件删除失败会终止删除操作
| 参数名 | 描述 |
|---|---|
| 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);
源码解析:
链接:待补充方法明细 方法名称:cn.hutool.core.io.FileUtil.del(java.io.File) 方法描述
删除文件或者文件夹
注意:删除文件夹时不会判断文件夹是否为空,如果不空则递归删除子文件或文件夹
某个文件删除失败会终止删除操作
| 参数名 | 描述 |
|---|---|
| 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) 方法描述
清空文件夹
注意:清空文件夹时不会判断文件夹是否为空,如果不空则递归删除子文件或文件夹
某个文件删除失败会终止删除操作
4.0.8
参数描述:| 参数名 | 描述 |
|---|---|
| String dirPath | dirPath 文件夹路径 |
成功与否
参考案例: //清空一个存在的文件夹,应返回true
boolean result = FileUtil.clean("C:\Users\Administrator\Desktop\xuzhu\cleanTest\");
Assert.assertTrue(result);
清空前
清空后
源码解析:链接:待补充方法明细 方法名称:cn.hutool.core.io.FileUtil.clean(java.io.File) 方法描述
清空文件夹
注意:清空文件夹时不会判断文件夹是否为空,如果不空则递归删除子文件或文件夹
某个文件删除失败会终止删除操作
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) 方法描述
清理空文件夹
此方法用于递归删除空的文件夹,不删除文件
如果传入的文件夹本身就是空的,删除这个文件夹
4.5.5
参数描述:| 参数名 | 描述 |
|---|---|
| File directory | directory 文件夹 |
成功与否
参考案例1: //清理空文件夹 此文件夹包含一个空文件夹,一个非空文件夹和一个文件
boolean result = FileUtil.cleanEmpty(new File("C:\Users\Administrator\Desktop\xuzhu\cleanEmptyTest\"));
Assert.assertTrue(result);
参考案例2:
//清理空文件夹 传入的文件夹本身就是空的,删除这个文件夹
boolean result = FileUtil.cleanEmpty(new File("C:\Users\Administrator\Desktop\xuzhu\cleanEmptyTest1\"));
Assert.assertTrue(result);
源码解析:
链接:待补充方法明细 方法名称:cn.hutool.core.io.FileUtil.mkdir(java.lang.String) 方法描述
创建文件夹,如果存在直接返回此文件夹
此方法不对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());参考案例2:
String path = "C:\Users\Administrator\Desktop\xuzhu\mkdirTest\mkdirTest1\mkdirTest1.txt"; //文件路径 最后的文件名,也会变成文件夹的名称 File dirFir = FileUtil.mkdir(path); Assert.assertEquals(Boolean.TRUE,dirFir.exists());源码解析:
链接:待补充方法明细 方法名称:cn.hutool.core.io.FileUtil.mkdir(java.io.File) 方法描述
创建文件夹,会递归自动创建其不存在的父文件夹,如果存在直接返回此文件夹
此方法不对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) 方法描述
创建临时文件
创建后的文件名为 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());
源码解析:
链接:待补充方法明细 方法名称:cn.hutool.core.io.FileUtil.createTempFile(java.io.File, boolean) 方法描述
创建临时文件
创建后的文件名为 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) 方法描述
创建临时文件
创建后的文件名为 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());
源码解析:
链接:待补充方法明细 方法名称: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());
复制前:
复制后:
复制完后,再执行代码
参考案例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());
复制前:
复制后:
参考案例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());源码解析:
链接:待补充方法明细 方法名称: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());源码解析:
链接:待补充方法明细 方法名称:cn.hutool.core.io.FileUtil.copy(java.lang.String, java.lang.String, boolean) 方法描述
复制文件或目录
如果目标文件为目录,则将源文件以相同文件名拷贝到目标目录
| 参数名 | 描述 |
|---|---|
| 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());源码解析:
链接:待补充方法明细 方法名称: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目录下支持版本及以上 参数描述:
| 参数名 | 描述 |
|---|---|
| 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) 方法描述
复制文件或目录
情况如下:
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);
复制前
复制后:目标目录如果不存在,程序会帮忙创建目录
参考案例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);参考案例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);参考案例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);
复制前:
复制后:
源码解析:链接:待补充方法明细 方法名称: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目录下支持版本及以上
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);参考案例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);
复制前:
复制后:
源码解析:链接:待补充方法明细 方法名称: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);
移动前:
移动后:
参考案例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);
移动前:
移动后:
参考案例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);
移动前:
移动后:
源码解析:链接:待补充方法明细 方法名称: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支持版本及以上
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);
修改前:
修改后:
源码解析:链接:待补充方法明细 方法名称: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支持版本及以上
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);
修改前:
修改后:
源码解析:链接:待补充方法明细 方法名称: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")));
源码解析:
链接:待补充方法明细 方法名称:cn.hutool.core.io.FileUtil.getAbsolutePath(java.lang.String, java.lang.Class) 方法描述
获取绝对路径
此方法不会判定给定路径是否有效(文件或目录存在)
| 参数名 | 描述 |
|---|---|
| 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);
源码解析:
链接:待补充方法明细 方法名称:cn.hutool.core.io.FileUtil.getAbsolutePath(java.lang.String) 方法描述
获取绝对路径,相对于ClassPath的目录
如果给定就是绝对路径,则返回原路径,原路径把所有替换为/
兼容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);
"中文.xml"这个文件是不存在的,但是路径还是可以取到“相对于ClassPath的”
源码解析:链接:待补充方法明细 方法名称: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);
源码解析:
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)
方法描述
给定路径已经是绝对路径
此方法并没有针对路径做标准化,建议先执行{@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) 方法描述
检查两个文件是否是同一个文件
所谓文件相同,是指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) 方法描述
比较两个文件内容是否相同
首先比较长度,长度一致再比较内容
此方法来自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) 方法描述
比较两个文件内容是否相同
首先比较长度,长度一致再比较内容,比较内容采用按行读取,每行比较
此方法来自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) 方法描述
文件路径是否相同
取两个文件的绝对路径比较,在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) 方法描述
判断文件是否被改动
如果文件对象为 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) 方法描述
修复路径
如果原路径尾部有分隔符,则保留为标准分隔符(/),否则不保留
- 1. 统一用 /
- 2. 多个 / 转换为一个 /
- 3. 去除两边空格
- 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) 方法描述
判断文件路径是否有指定后缀,忽略大小写
常用语判断扩展名
| 参数名 | 描述 |
|---|---|
| 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) 方法描述
转换文件编码
此方法用于转换文件编码,读取的文件实际编码必须与指定的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);
}
源码解析:
链接:待补充方法明细 方法名称:cn.hutool.core.io.FileUtil.convertLineSeparator(java.io.File, java.nio.charset.Charset, cn.hutool.core.io.file.LineSeparator) 方法描述
转换换行符
将给定文件的换行符转换为指定换行符
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);
}
源码解析:
链接:待补充方法明细 方法名称:cn.hutool.core.io.FileUtil.cleanInvalid(java.lang.String) 方法描述
清除文件名中的在Windows下不支持的非法字符,包括: / : * ? " < > |
支持版本及以上3.3.1
参数描述:| 参数名 | 描述 |
|---|---|
| String fileName | fileName 文件名(必须不包括路径,否则路径符将被替换) |
清理后的文件名
参考案例://清除文件名中的在Windows下不支持的非法字符,包括: / : * ? " < > | String fileName = "cleanInvalidTest \ / : * ? " < > |.txt"; System.out.println(FileUtil.cleanInvalid(fileName));源码解析:
链接:待补充方法明细 方法名称:cn.hutool.core.io.FileUtil.containsInvalid(java.lang.String) 方法描述
文件名中是否包含在Windows下不支持的非法字符,包括: / : * ? " < > |
支持版本及以上3.3.1
参数描述:| 参数名 | 描述 |
|---|---|
| String fileName | fileName 文件名(必须不包括路径,否则路径符将被替换) |
是否包含非法字符
参考案例:String fileName = "cleanInvalidTest \ / : * ? " < > |.txt"; //文件名中是否包含在Windows下不支持的非法字符,包括: / : * ? " < > | 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路径
原理是首先获取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());
源码解析:
链接:待补充方法明细 方法名称: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"命令功能
此方法会阻塞当前线程
| 参数名 | 描述 |
|---|---|
| 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());
监听启动前:
监听启动后:
源码解析:链接:待补充方法明细 方法名称:cn.hutool.core.io.FileUtil.tail(java.io.File, java.nio.charset.Charset, cn.hutool.core.io.LineHandler) 方法描述
文件内容跟随器,实现类似Linux下"tail -f"命令功能
此方法会阻塞当前线程
| 参数名 | 描述 |
|---|---|
| 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"命令功能
此方法会阻塞当前线程
| 参数名 | 描述 |
|---|---|
| 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: rn Mac: r Linux: n支持版本及以上
4.0.5
参数描述:| 参数名 | 描述 |
|---|
换行符
参考案例: //获取当前系统的换行分隔符
//* Windows: rn
//* 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");
源码解析:
链接:待补充



