技术活,该赏
关注+一键三连(点赞,评论,收藏)再看,养成好习惯
hutool实战(带你掌握里面的各种工具)目录
用途:文件工具类(文件常用操作)
使用场景
提供100多个文件常用操作方法,包含并不局限于:判断文件或文件夹是否为空、判断file是否为文件或文件夹、递归文件夹里的所有文件、获取指定文件夹的所有文件名、获取临时文件夹或临时文件的内容或者路径、计算文件夹或文件的总大小、创建文件或文件夹、创建临时文件或临时文件夹、删除文件或文件夹、修改文件名或文件夹名、复制文件或文件夹、移动文件或文件夹、清空文件夹、获取规范的绝对路径、比较两个文件、判断文件是否被改动、获取父路径或子路径、获取主文件名或后缀名等
项目引用
此博文的依据:hutool-5.6.5版本源码
< dependency>
< groupId> cn.hutool</ groupId>
< artifactId> hutool-core</ artifactId>
< version> 5.6.5</ version>
</ dependency>
方法摘要
方法 描述
是否为Windows环境
列出目录文件<br> 给定的绝对路径不能是压缩包中的路径
文件是否为空<br> 目录:里面没有文件时为空 文件:文件大小为0时为空
文件是否为非空<br> 目录:里面没有文件时为空 文件:文件大小为0时为空
目录是否为空
递归遍历目录以及子目录中的所有文件<br> 如果提供file为文件,直接返回过滤结果
递归遍历目录以及子目录中的所有文件<br> 如果提供file为文件,直接返回过滤结果
递归遍历目录并处理目录下的文件,可以处理目录或文件:
非目录则直接调用{@link Consumer}处理 目录则递归调用此方法处理
递归遍历目录以及子目录中的所有文件<br> 如果提供file为文件,直接返回过滤结果
递归遍历目录以及子目录中的所有文件
递归遍历目录以及子目录中的所有文件
获得指定目录下所有文件名<br> 不会扫描子目录
创建File对象,相当于调用new File(),不做任何处理
创建File对象,自动识别相对或绝对路径,相对路径将自动从ClassPath下寻找
创建File对象<br> 此方法会检查slip漏洞,漏洞说明见http://blog./zip-slip-2/
创建File对象<br> 根据的路径构建文件,在Win下直接构建,在Linux下拆分路径单独构建 此方法会检查slip漏洞,漏洞说明见http://blog./zip-slip-2/
通过多层目录参数创建文件<br> 此方法会检查slip漏洞,漏洞说明见http://blog./zip-slip-2/
创建File对象
创建File对象
获取临时文件路径(绝对路径)
获取临时文件目录
获取用户路径(绝对路径)
获取用户目录
判断文件是否存在,如果path为null,则返回false
判断文件是否存在,如果file为null,则返回false
是否存在匹配文件
指定文件最后修改时间
指定路径文件最后修改时间
计算目录或文件的总大小<br> 当给定对象为文件时,直接调用 {@link File#length()}<br> 当给定对象为目录时,遍历目录下的所有文件和目录,递归计算其大小,求和返回
给定文件或目录的最后修改时间是否晚于给定时间
给定文件或目录的最后修改时间是否晚于给定时间
创建文件及其父目录,如果这个文件存在,直接返回这个文件<br> 此方法不对File对象类型做判断,如果File不存在,无法判断其类型
创建文件及其父目录,如果这个文件存在,直接返回这个文件<br> 此方法不对File对象类型做判断,如果File不存在,无法判断其类型
创建文件及其父目录,如果这个文件存在,直接返回这个文件<br> 此方法不对File对象类型做判断,如果File不存在,无法判断其类型
创建文件及其父目录,如果这个文件存在,直接返回这个文件<br> 此方法不对File对象类型做判断,如果File不存在,无法判断其类型
创建所给文件或目录的父目录
创建父文件夹,如果存在直接返回此文件夹
删除文件或者文件夹<br> 路径如果为相对路径,会转换为ClassPath路径! 注意:删除文件夹时不会判断文件夹是否为空,如果不空则递归删除子文件或文件夹<br> 某个文件删除失败会终止删除操作
删除文件或者文件夹<br> 注意:删除文件夹时不会判断文件夹是否为空,如果不空则递归删除子文件或文件夹<br> 某个文件删除失败会终止删除操作
清空文件夹<br> 注意:清空文件夹时不会判断文件夹是否为空,如果不空则递归删除子文件或文件夹<br> 某个文件删除失败会终止删除操作
清空文件夹<br> 注意:清空文件夹时不会判断文件夹是否为空,如果不空则递归删除子文件或文件夹<br> 某个文件删除失败会终止删除操作
清理空文件夹<br> 此方法用于递归删除空的文件夹,不删除文件<br> 如果传入的文件夹本身就是空的,删除这个文件夹
创建文件夹,如果存在直接返回此文件夹<br> 此方法不对File对象类型做判断,如果File不存在,无法判断其类型
创建文件夹,会递归自动创建其不存在的父文件夹,如果存在直接返回此文件夹<br> 此方法不对File对象类型做判断,如果File不存在,无法判断其类型
创建临时文件<br> 创建后的文件名为 prefix[Randon].tmp
创建临时文件<br> 创建后的文件名为 prefix[Randon].tmp
创建临时文件<br> 创建后的文件名为 prefix[Randon].suffix From com.jodd.io.FileUtil
通过JDK7+的 Files#copy(Path, Path, CopyOption…) 方法拷贝文件
通过JDK7+的 Files#copy(Path, Path, CopyOption…) 方法拷贝文件
复制文件或目录<br> 如果目标文件为目录,则将源文件以相同文件名拷贝到目标目录
复制文件或目录<br> 情况如下:
1、src和dest都为目录,则将src目录及其目录下所有文件目录拷贝到dest下 2、src和dest都为文件,直接复制,名字为dest 3、src为文件,dest为目录,将src拷贝到dest目录下
复制文件或目录<br> 情况如下:
1、src和dest都为目录,则讲src下所有文件目录拷贝到dest下 2、src和dest都为文件,直接复制,名字为dest 3、src为文件,dest为目录,将src拷贝到dest目录下
复制文件或目录<br> 情况如下:
1、src和dest都为目录,则讲src下所有文件(包括子目录)拷贝到dest下 2、src和dest都为文件,直接复制,名字为dest 3、src为文件,dest为目录,将src拷贝到dest目录下
移动文件或者目录
修改文件或目录的文件名,不变更路径,只是简单修改文件名,不保留扩展名。<br>
FileUtil.rename(file, “aaa.png”, true) xx/xx.png =》xx/aaa.png
修改文件或目录的文件名,不变更路径,只是简单修改文件名<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
获取规范的绝对路径
获取绝对路径<br> 此方法不会判定给定路径是否有效(文件或目录存在)
获取绝对路径,相对于ClassPath的目录<br> 如果给定就是绝对路径,则返回原路径,原路径把所有\替换为/<br> 兼容Spring风格的路径表示,例如:classpath:config/example.setting也会被识别后转换
获取标准的绝对路径
给定路径已经是绝对路径<br> 此方法并没有针对路径做标准化,建议先执行{@link #normalize(String)}方法标准化路径后判断
判断是否为目录,如果path为null,则返回false
判断是否为目录,如果file为null,则返回false
判断是否为文件,如果path为null,则返回false
判断是否为文件,如果file为null,则返回false
检查两个文件是否是同一个文件<br> 所谓文件相同,是指File对象是否指向同一个文件或文件夹
比较两个文件内容是否相同<br> 首先比较长度,长度一致再比较内容<br> 此方法来自Apache Commons io
比较两个文件内容是否相同<br> 首先比较长度,长度一致再比较内容,比较内容采用按行读取,每行比较<br> 此方法来自Apache Commons io
文件路径是否相同<br> 取两个文件的绝对路径比较,在Windows下忽略大小写,在Linux下不忽略。
获得最后一个文件路径分隔符的位置
判断文件是否被改动<br> 如果文件对象为 null 或者文件不存在,被视为改动
修复路径<br> 如果原路径尾部有分隔符,则保留为标准分隔符(/),否则不保留
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”
获得相对子路径
栗子:
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/ccc =》 ccc dirPath: d:/Aaa/bbb filePath: d:/aaa/bbb/ccc.txt =》 ccc.txt dirPath: d:/Aaa/bbb filePath: d:/aaa/bbb/ =》 “”
判断文件路径是否有指定后缀,忽略大小写<br> 常用语判断扩展名
根据文件流的头部信息获得文件类型
1、无法识别类型默认按照扩展名识别 2、xls、doc、msi头信息无法区分,按照扩展名区分 3、zip可能为docx、xlsx、pptx、jar、war头信息无法区分,按照扩展名区分
转换文件编码<br> 此方法用于转换文件编码,读取的文件实际编码必须与指定的srcCharset编码一致,否则导致乱码
转换换行符<br> 将给定文件的换行符转换为指定换行符
清除文件名中的在Windows下不支持的非法字符,包括: \ / : * ? " < >
文件名中是否包含在Windows下不支持的非法字符,包括: \ / : * ? " < >
计算文件CRC32校验码
计算文件校验码
获取Web项目下的web root路径<br> 原理是首先获取ClassPath路径,由于在web项目中ClassPath位于 WEB-INF/classes/下,故向上获取两级目录即可。
获取指定层级的父路径
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
获取指定层级的父路径
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
检查父完整路径是否为自路径的前半部分,如果不是说明不是子路径,可能存在slip注入。
见http://blog./zip-slip-2/
根据文件扩展名获得MimeType
判断是否为符号链接文件
判断给定的目录是否为给定文件或文件夹的子目录
创建{@link RandomAccessFile}
创建{@link RandomAccessFile}
文件内容跟随器,实现类似Linux下"tail -f"命令功能<br> 此方法会阻塞当前线程
文件内容跟随器,实现类似Linux下"tail -f"命令功能<br> 此方法会阻塞当前线程
文件内容跟随器,实现类似Linux下"tail -f"命令功能<br> 此方法会阻塞当前线程
返回文件名
返回文件名
获取文件后缀名,扩展名不带“.”
获得文件后缀名,扩展名不带“.”
返回主文件名
返回主文件名
返回主文件名
返回主文件名
获取文件扩展名(后缀名),扩展名不带“.”
获得文件的扩展名(后缀名),扩展名不带“.”
获取当前系统的换行分隔符
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 ( "其他环境" ) ;
}
源码解析:
链接:待补充
方法明细
方法名称: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 ( ) ) ;
}
源码解析:
链接:待补充
方法明细
方法名称:cn.hutool.core.io.FileUtil.isEmpty(java.io.File)
方法描述
文件是否为空<br> 目录:里面没有文件时为空 文件:文件大小为0时为空
支持版本及以上
参数描述:
返回值:
是否为空,当提供目录或文件大小为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)
方法描述
文件是否为非空<br> 目录:里面没有文件时为空 文件:文件大小为0时为空
支持版本及以上
参数描述:
返回值:
是否为空,当提供目录或文件大小为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不然会抛异常
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 ( ) ) ;
}
源码解析:
链接:待补充
方法明细
方法名称: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 ( ) ) ;
}
源码解析:
链接:待补充
方法明细
方法名称: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 ( ) ) ;
}
源码解析:
链接:待补充
方法明细
方法名称:cn.hutool.core.io.FileUtil.loopFiles(java.lang.String)
方法描述
递归遍历目录以及子目录中的所有文件
支持版本及以上
3.2.0
参数描述:
参数名 描述 String path
path 当前遍历文件或目录的路径
返回值:
文件列表
参考案例:
//递归遍历目录以及子目录中的所有文件
List< File> files = FileUtil. loopFiles ( "C:\\Users\\Administrator\\Desktop\\xuzhu" ) ;
for ( File file: files) {
System. out. println ( file. getName ( ) ) ;
}
源码解析:
链接:待补充
方法明细
方法名称:cn.hutool.core.io.FileUtil.loopFiles(java.io.File)
方法描述
递归遍历目录以及子目录中的所有文件
支持版本及以上
参数描述:
参数名 描述 File file
file 当前遍历文件
返回值:
文件列表
参考案例:
//递归遍历目录以及子目录中的所有文件
List< File> files = FileUtil. loopFiles ( new File ( "C:\\Users\\Administrator\\Desktop\\xuzhu" ) ) ;
for ( File file: files) {
System. out. println ( file. getName ( ) ) ;
}
源码解析:
链接:待补充
方法明细
方法名称:cn.hutool.core.io.FileUtil.listFileNames(java.lang.String)
方法描述
获得指定目录下所有文件名<br> 不会扫描子目录
支持版本及以上
参数描述:
参数名 描述 String path
path 相对ClassPath的目录或者绝对路径目录
返回值:
所有文件名列表
参考案例:
//获得指定目录下所有文件名 不会扫描子目录
List< String> paths = FileUtil. listFileNames ( "C:\\Users\\Administrator\\Desktop\\xuzhu" ) ;
for ( String path: paths) {
System. out. println ( path) ;
}
源码解析:
链接:待补充
方法明细
方法名称:cn.hutool.core.io.FileUtil.newFile(java.lang.String)
方法描述
创建File对象,相当于调用new File(),不做任何处理
支持版本及以上
4.1.4
参数描述:
参数名 描述 String path
path 文件路径
返回值:
File
参考案例:
//创建File对象,相当于调用new File(),不做任何处理
File newfile = FileUtil. newFile ( "C:\\Users\\Administrator\\Desktop\\xuzhu\\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对象<br> 此方法会检查slip漏洞,漏洞说明见http://blog./zip-slip-2/
支持版本及以上
参数描述:
参数名 描述 String parent
parent 父目录
String path
path 文件路径
返回值:
File
参考案例:
//创建File对象,此方法会检查slip漏洞,漏洞说明见http://blog./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对象<br> 根据的路径构建文件,在Win下直接构建,在Linux下拆分路径单独构建 此方法会检查slip漏洞,漏洞说明见http://blog./zip-slip-2/
支持版本及以上
参数描述:
参数名 描述 File parent
parent 父文件对象
String path
path 文件路径
返回值:
File
参考案例:
//创建File对象,此方法会检查slip漏洞,漏洞说明见http://blog./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./zip-slip-2/
支持版本及以上
4.0.6
参数描述:
参数名 描述 File directory
directory 父目录
java.lang.String[] names
names 元素名(多层目录名),由外到内依次传入
返回值:
the file 文件
参考案例:
//创建File对象,此方法会检查slip漏洞,漏洞说明见http://blog./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对象
支持版本及以上
参数描述:
返回值:
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对象
支持版本及以上
参数描述:
返回值:
File
参考案例:
File srcFile = null;
File file= new File ( "C:\\Users\\Administrator\\Desktop\\xuzhu\\contentEqualsIgnoreEOLTest1.txt" ) ;
try {
URL url = file. toURI ( ) . toURL ( ) ;
System. out. println ( "url:" + url) ;
srcFile = FileUtil. file ( url) ;
} catch ( Exception e) {
e. printStackTrace ( ) ;
}
Assert. assertEquals ( Boolean. TRUE, srcFile. exists ( ) ) ;
源码解析:
链接:待补充
方法明细
方法名称:cn.hutool.core.io.FileUtil.getTmpDirPath()
方法描述
获取临时文件路径(绝对路径)
支持版本及以上
4.0.6
参数描述:
返回值:
临时文件路径
参考案例:
//获取临时文件路径(绝对路径)(当前电脑的临时文件路径)
System. out. println ( "临时文件路径:" + FileUtil. getTmpDirPath ( ) ) ;
源码解析:
/**
* 获取临时文件路径(绝对路径)
*
* @return 临时文件路径
* @since 4.0.6
*/
public static String getTmpDirPath() {
return System.getProperty("java.io.tmpdir");
}
方法明细
方法名称:cn.hutool.core.io.FileUtil.getTmpDir()
方法描述
获取临时文件目录
支持版本及以上
4.0.6
参数描述:
返回值:
临时文件目录
参考案例:
//获取临时文件目录
File temFile = FileUtil. getTmpDir ( ) ;
System. out. println ( "临时文件目录:" + temFile. getPath ( ) ) ;
Assert. assertEquals ( Boolean. TRUE, temFile. exists ( ) ) ;
源码解析:
/**
* 获取临时文件目录
*
* @return 临时文件目录
* @since 4.0.6
*/
public static File getTmpDir() {
return file(getTmpDirPath());
}
方法明细
方法名称:cn.hutool.core.io.FileUtil.getUserHomePath()
方法描述
获取用户路径(绝对路径)
支持版本及以上
4.0.6
参数描述:
返回值:
用户路径
参考案例:
//获取用户路径(绝对路径)
System. out. println ( "获取用户路径(绝对路径):" + FileUtil. getUserHomePath ( ) ) ;
源码解析:
/**
* 获取用户路径(绝对路径)
*
* @return 用户路径
* @since 4.0.6
*/
public static String getUserHomePath() {
return System.getProperty("user.home");
}
方法明细
方法名称:cn.hutool.core.io.FileUtil.getUserHomeDir()
方法描述
获取用户目录
支持版本及以上
4.0.6
参数描述:
返回值:
用户目录
参考案例:
//获取用户目录
File userHomeDir = FileUtil. getUserHomeDir ( ) ;
System. out. println ( "用户目录:" + userHomeDir. getPath ( ) ) ;
Assert. assertEquals ( Boolean. TRUE, userHomeDir. exists ( ) ) ;
源码解析:
/**
* 获取用户目录
*
* @return 用户目录
* @since 4.0.6
*/
public static File getUserHomeDir() {
return file(getUserHomePath());
}
方法明细
方法名称:cn.hutool.core.io.FileUtil.exist(java.lang.String)
方法描述
判断文件是否存在,如果path为null,则返回false
支持版本及以上
参数描述:
参数名 描述 String path
path 文件路径
返回值:
如果存在返回true
参考案例:
String path = "C:\\Users\\Administrator\\Desktop\\xuzhu" ;
Assert. assertEquals ( Boolean. TRUE, FileUtil. exist ( path) ) ;
//不存在的路径
Assert. assertEquals ( Boolean. FALSE, FileUtil. exist ( path+ "123" ) ) ;
path = null;
Assert. assertEquals ( Boolean. FALSE, FileUtil. exist ( path) ) ;
//相比于file.exists()优势,多了路径的判空处理
//下面会抛出空指针 NullPointerException
File file = new File ( path) ;
Assert. assertEquals ( Boolean. FALSE, file. exists ( ) ) ;
源码解析:
//代码很清晰,就是在原先的file.exists()基础上,加了路径的判空处理
/**
* 判断文件是否存在,如果path为null,则返回false
*
* @param path 文件路径
* @return 如果存在返回true
*/
public static boolean exist(String path) {
return (null != path) && file(path).exists();
}
方法明细
方法名称:cn.hutool.core.io.FileUtil.exist(java.io.File)
方法描述
判断文件是否存在,如果file为null,则返回false
支持版本及以上
参数描述:
返回值:
如果存在返回true
参考案例:
String path = "C:\\Users\\Administrator\\Desktop\\xuzhu" ;
File file = new File ( path) ;
Assert. assertEquals ( Boolean. TRUE, FileUtil. exist ( file) ) ;
//不存在的路径
file = new File ( path+ "123" ) ;
Assert. assertEquals ( Boolean. FALSE, FileUtil. exist ( file) ) ;
file = null;
Assert. assertEquals ( Boolean. FALSE, FileUtil. exist ( file) ) ;
源码解析:
/**
* 判断文件是否存在,如果file为null,则返回false
*
* @param file 文件
* @return 如果存在返回true
*/
public static boolean exist(File file) {
return (null != file) && file.exists();
}
方法明细
方法名称:cn.hutool.core.io.FileUtil.exist(java.lang.String, java.lang.String)
方法描述
是否存在匹配文件
支持版本及以上
参数描述:
参数名 描述 String directory
directory 文件夹路径
String regexp
regexp 文件夹中所包含文件名的正则表达式
返回值:
如果存在匹配文件返回true
参考案例:
String path = "C:\\Users\\Administrator\\Desktop\\xuzhu" ;
//通过匹配文件名正则公式,判断是否存在匹配文件
String regexp = "contentEqualsIgnoreEOLTest(.*)" ;
Assert. assertEquals ( Boolean. TRUE, FileUtil. exist ( path, regexp) ) ;
源码解析:
链接:待补充
方法明细
方法名称:cn.hutool.core.io.FileUtil.lastModifiedTime(java.io.File)
方法描述
指定文件最后修改时间
支持版本及以上
参数描述:
返回值:
最后修改时间
参考案例:
File file= new File ( "C:\\Users\\Administrator\\Desktop\\xuzhu\\contentEqualsIgnoreEOLTest1.txt" ) ;
Date lastModifiedTime = FileUtil. lastModifiedTime ( file) ;
System. out. println ( DateUtil. formatDateTime ( lastModifiedTime) ) ;
源码解析:
在file. lastModified ( ) 的基础上,增加了file为null的判断
/**
* 指定文件最后修改时间
*
* @param file 文件
* @return 最后修改时间
*/
public static Date lastModifiedTime ( File file) {
if ( false == exist ( file) ) {
return null;
}
return new Date ( file. lastModified ( ) ) ;
}
方法明细
方法名称:cn.hutool.core.io.FileUtil.lastModifiedTime(java.lang.String)
方法描述
指定路径文件最后修改时间
支持版本及以上
参数描述:
参数名 描述 String path
path 绝对路径
返回值:
最后修改时间
参考案例:
String path = "C:\\Users\\Administrator\\Desktop\\xuzhu\\contentEqualsIgnoreEOLTest1.txt" ;
Date lastModifiedTime = FileUtil. lastModifiedTime ( path) ;
System. out. println ( DateUtil. formatDateTime ( lastModifiedTime) ) ;
源码解析:
链接:待补充
方法明细
方法名称:cn.hutool.core.io.FileUtil.size(java.io.File)
方法描述
计算目录或文件的总大小<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) ) ) ;
源码解析:
链接:待补充
方法明细
方法名称: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)
方法描述
创建文件及其父目录,如果这个文件存在,直接返回这个文件<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) ) ;
源码解析:
链接:待补充
方法明细
方法名称:cn.hutool.core.io.FileUtil.touch(java.io.File)
方法描述
创建文件及其父目录,如果这个文件存在,直接返回这个文件<br> 此方法不对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) ) ;
源码解析:
链接:待补充
方法明细
方法名称: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) ;
源码解析:
链接:待补充
方法明细
方法名称:cn.hutool.core.io.FileUtil.del(java.io.File)
方法描述
删除文件或者文件夹<br> 注意:删除文件夹时不会判断文件夹是否为空,如果不空则递归删除子文件或文件夹<br> 某个文件删除失败会终止删除操作
支持版本及以上
参数描述:
返回值:
成功与否
参考案例:
// 删除一个不存在的文件,应返回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) ;
清空前
清空后
源码解析:
链接:待补充
方法明细
方法名称: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) ;
参考案例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)
方法描述
创建文件夹,如果存在直接返回此文件夹<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 ( ) ) ;
参考案例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)
方法描述
创建文件夹,会递归自动创建其不存在的父文件夹,如果存在直接返回此文件夹<br> 此方法不对File对象类型做判断,如果File不存在,无法判断其类型
支持版本及以上
参数描述:
返回值:
创建的目录
参考案例:
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 ( ) ) ;
源码解析:
链接:待补充
方法明细
方法名称: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 ( ) ) ;
源码解析:
链接:待补充
方法明细
方法名称: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)
方法描述
复制文件或目录<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 ( ) ) ;
源码解析:
链接:待补充
方法明细
方法名称: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 ) ;
复制前
复制后:目标目录如果不存在,程序会帮忙创建目录
参考案例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)
方法描述
复制文件或目录<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 ) ;
参考案例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)
方法描述
修改文件或目录的文件名,不变更路径,只是简单修改文件名,不保留扩展名。<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 ) ;
修改前:
修改后:
源码解析:
链接:待补充
方法明细
方法名称: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 ) ;
修改前:
修改后:
源码解析:
链接:待补充
方法明细
方法名称:cn.hutool.core.io.FileUtil.getCanonicalPath(java.io.File)
方法描述
获取规范的绝对路径
支持版本及以上
4.1.4
参数描述:
返回值:
规范绝对路径,如果传入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)
方法描述
获取绝对路径<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) ;
源码解析:
链接:待补充
方法明细
方法名称: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) ;
"中文.xml"这个文件是不存在的,但是路径还是可以取到“相对于ClassPath的”
源码解析:
链接:待补充
方法明细
方法名称:cn.hutool.core.io.FileUtil.getAbsolutePath(java.io.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)
方法描述
给定路径已经是绝对路径<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
支持版本及以上
参数描述:
返回值:
如果为目录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
支持版本及以上
参数描述:
返回值:
如果为文件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. 统一用 / 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)
方法描述
判断文件路径是否有指定后缀,忽略大小写<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) ;
}
源码解析:
链接:待补充
方法明细
方法名称: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) ;
}
源码解析:
链接:待补充
方法明细
方法名称: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路径<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./zip-slip-2/ ### 支持版本及以上
参数描述:
参数名 描述 File parentFile
parentFile 父文件或目录
File file
file 子文件或目录
返回值:
子文件或目录
参考案例1:
//检查父完整路径是否为自路径的前半部分,如果不是说明不是子路径,可能存在slip注入,此方法会检查slip漏洞,漏洞说明见http://blog./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./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"命令功能<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 ( ) ) ;
监听启动前:
监听启动后:
源码解析:
链接:待补充
方法明细
方法名称: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
参数描述:
返回值:
文件名
参考案例:
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
参数描述:
返回值:
扩展名
参考案例:
Stringpath = "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 文件名
返回值:
扩展名
参考案例:
Stringpath = "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
参数描述:
返回值:
主文件名
参考案例:
Stringpath = "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 完整文件名
返回值:
主文件名
参考案例:
Stringpath = "d:\\aaa\\bbb\\cc\\ddd.jpg" ;
//返回主文件名
String suffix = FileUtil. getPrefix ( path) ;
Assert. assertEquals ( "ddd" , suffix) ;
源码解析:
链接:待补充
方法明细
方法名称:cn.hutool.core.io.FileUtil.mainName(java.io.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)
方法描述
获取文件扩展名(后缀名),扩展名不带“.”
支持版本及以上
参数描述:
返回值:
扩展名
参考案例:
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" ) ;
源码解析:
链接:待补充