Package com.luna.common.file
Class FileTools
java.lang.Object
com.luna.common.file.FileTools
- Author:
- Luna
-
Constructor Summary
-
Method Summary
Modifier and TypeMethodDescriptionstatic File
检查父完整路径是否为自路径的前半部分,如果不是说明不是子路径,可能存在slip注入。static void
cleanDirectory
(File file, boolean parent) 清空目录下所有文件static void
cleanDirectory
(String path) 清空目录下所有文件static void
cleanDirectory
(String path, boolean parent) 清空目录下所有文件static void
static void
static long
计算文件中行数static void
createDirectory
(String pathDir) 路径创建文件夹static void
deleteIfExists
(String file) 删除文件或空目录static void
下载文件static void
downloadWithRetry
(String url, String file, int maxRetry) 下载文件,失败在优先次数内重试static boolean
检查两个文件是否是同一个文件
所谓文件相同,是指File对象是否指向同一个文件或文件夹static boolean
检查两个文件是否是同一个文件
所谓文件相同,是指Path对象是否指向同一个文件或文件夹static File
创建File对象
根据的路径构建文件,在Win下直接构建,在Linux下拆分路径单独构建 此方法会检查slip漏洞,漏洞说明见http://blog.nsfocus.net/zip-slip-2/static File
创建File对象,自动识别相对或绝对路径,相对路径将自动从ClassPath下寻找static BufferedInputStream
getInputStream
(File file) 获得输入流static String
获取Path
文件名static BufferedOutputStream
getOutputStream
(File file) 获得一个输出流对象static File
获取指定层级的父路径static BufferedReader
获得一个文件读取器static File
获取临时文件目录static String
获取临时文件路径(绝对路径)static File
获取用户目录static String
获取用户路径(绝对路径)static BufferedWriter
获得一个带缓存的写入对象static boolean
判断一个文件是否存在static boolean
判断给定的目录是否为给定文件或文件夹的子目录static boolean
判断给定的目录是否为给定文件或文件夹的子目录static File
创建文件夹,会递归自动创建其不存在的父文件夹,如果存在直接返回此文件夹
此方法不对File对象类型做判断,如果File不存在,无法判断其类型static boolean
mkdirsSafely
(File dir, int tryCount, long sleepMillis) 安全地级联创建目录 (确保并发环境下能创建成功)static File
mkParentDirs
(File file) 创建所给文件或目录的父目录static Path
移动文件或目录
当目标是目录时,会将源文件或文件夹整体移动至目标目录下
例如:move("/usr/aaa", "/usr/bbb")结果为:"/usr/bbb/aaa"static boolean
判断一个文件是否存在static boolean
pathEquals
(File file1, File file2) 文件路径是否相同
取两个文件的绝对路径比较,在Windows下忽略大小写,在Linux下不忽略。static byte[]
文件读取字节readAllLines
(String fileName) 读取文件所有内容static String
readFileToString
(File file, Charset destCharset) 读取文件static String
readFileToString
(String path) 读取文件static String
readFileToString
(String path, Charset destCharset) 读取文件static File
修改文件或目录的文件名,不变更路径,只是简单修改文件名,不保留扩展名。static File
修改文件或目录的文件名,不变更路径,只是简单修改文件名
重命名有两种模式:
1、isRetainExt为true时,保留原扩展名:static Path
修改文件或目录的文件名,不变更路径,只是简单修改文件名static File
创建文件及其父目录,如果这个文件存在,直接返回这个文件
此方法不对File对象类型做判断,如果File不存在,无法判断其类型static File
创建文件及其父目录,如果这个文件存在,直接返回这个文件
此方法不对File对象类型做判断,如果File不存在,无法判断其类型static void
字节写入文件static File
write
(InputStream in, File file, boolean isCloseIn) 将流的内容写入文件static File
write
(InputStream in, String file, boolean isCloseIn) 将流的内容写入文件static void
字符串写入文件static void
writeStringToFile
(File file, String content, Charset destCharset) 写入文件 不存在抛出异常static void
writeStringToFile
(File file, String content, Charset destCharset, boolean override) 写入文件static void
writeStringToFile
(String path, String content) 写入文件static void
writeStringToFile
(String path, String content, Charset destCharset, boolean override) 写入文件
-
Constructor Details
-
FileTools
public FileTools()
-
-
Method Details
-
getTmpDirPath
获取临时文件路径(绝对路径)- Returns:
- 临时文件路径
- Since:
- 4.0.6
-
getTmpDir
获取临时文件目录- Returns:
- 临时文件目录
- Since:
- 4.0.6
-
getUserHomePath
获取用户路径(绝对路径)- Returns:
- 用户路径
- Since:
- 4.0.6
-
getUserHomeDir
获取用户目录- Returns:
- 用户目录
- Since:
- 4.0.6
-
readAllLines
读取文件所有内容- Parameters:
fileName
- 文件路径带文件名- Returns:
- List
-
deleteIfExists
删除文件或空目录- Parameters:
file
- 文件目录 或者 文件名
-
isExists
判断一个文件是否存在- Parameters:
fileName
- 文件路径- Returns:
- boolean
-
notExists
判断一个文件是否存在- Parameters:
fileName
- 文件路径- Returns:
- boolean
-
write
字节写入文件- Parameters:
bytes
- 字节数组fileName
- 文件路径
-
write
将流的内容写入文件- Parameters:
in
- 输入流,不关闭isCloseIn
- 是否关闭输入流- Returns:
- dest
- Throws:
IOException
- IO异常- Since:
- 5.5.2
-
write
将流的内容写入文件- Parameters:
in
- 输入流,不关闭isCloseIn
- 是否关闭输入流- Returns:
- dest
- Throws:
IOException
- IO异常- Since:
- 5.5.2
-
write
字符串写入文件- Parameters:
fileName
- 文件路径content
- 文本内容- Throws:
IOException
- 写入异常
-
read
文件读取字节- Parameters:
fileName
- 文件路径- Returns:
- 字节数组
-
count
计算文件中行数- Parameters:
filePath
- 文件地址- Returns:
- long 行数
- Throws:
RuntimeException
-
read
-
download
下载文件若文件已存在,覆盖
有异常时抛出异常
- Parameters:
url
- 网络地址file
- 文件地址
-
downloadWithRetry
下载文件,失败在优先次数内重试- Parameters:
url
- 网络路径file
- 保存文件地址maxRetry
- 重试次数
-
writeStringToFile
写入文件- Parameters:
path
- 文件路径content
- 写入内容
-
createDirectory
路径创建文件夹- Parameters:
pathDir
- 文件夹路径
-
writeStringToFile
public static void writeStringToFile(String path, String content, Charset destCharset, boolean override) 写入文件- Parameters:
path
- 文件路径content
- 文件内容override
- 不存在是否创建
-
writeStringToFile
public static void writeStringToFile(File file, String content, Charset destCharset, boolean override) 写入文件- Parameters:
file
- 文件路径content
- 文件内容override
- 不存在是否创建
-
writeStringToFile
写入文件 不存在抛出异常- Parameters:
file
- 文件路径content
- 文件内容destCharset
- 编码格式
-
readFileToString
读取文件- Parameters:
path
- 文件全路径
-
readFileToString
读取文件- Parameters:
path
- 文件全路径destCharset
- 文件编码
-
readFileToString
读取文件- Parameters:
file
- 文件destCharset
- 文件编码
-
rename
修改文件或目录的文件名,不变更路径,只是简单修改文件名,不保留扩展名。
FileUtil.rename(file, "aaa.png", true) xx/xx.png =》xx/aaa.png
- Parameters:
file
- 被修改的文件newName
- 新的文件名,如需扩展名,需自行在此参数加上,原文件名的扩展名不会被保留isOverride
- 是否覆盖目标文件- Returns:
- 目标文件
- Since:
- 5.3.6
-
rename
修改文件或目录的文件名,不变更路径,只是简单修改文件名
重命名有两种模式:
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
- Parameters:
file
- 被修改的文件newName
- 新的文件名,包括扩展名isRetainExt
- 是否保留原文件的扩展名,如果保留,则newName不需要加扩展名isOverride
- 是否覆盖目标文件- Returns:
- 目标文件
- Since:
- 3.0.9
- See Also:
-
rename
修改文件或目录的文件名,不变更路径,只是简单修改文件名
FileUtil.rename(file, "aaa.jpg", false) xx/xx.png =》xx/aaa.jpg
- Parameters:
path
- 被修改的文件newName
- 新的文件名,包括扩展名isOverride
- 是否覆盖目标文件- Returns:
- 目标文件Path
- Since:
- 5.4.1
-
move
移动文件或目录
当目标是目录时,会将源文件或文件夹整体移动至目标目录下
例如:move("/usr/aaa", "/usr/bbb")结果为:"/usr/bbb/aaa"- Parameters:
src
- 源文件或目录路径target
- 目标路径,如果为目录,则移动到此目录下isOverride
- 是否覆盖目标文件- Returns:
- 目标文件Path
- Since:
- 5.5.1
-
cleanDirectory
清空目录下所有文件- Parameters:
path
- 目录路径
-
cleanDirectory
清空目录下所有文件- Parameters:
path
- 目录路径parent
- 路径为文件时,是否从父路径清除
-
cleanDirectory
清空目录下所有文件- Parameters:
file
- 文件系统parent
- 路径为文件时,是否从父路径清除
-
getName
获取Path
文件名- Parameters:
path
-Path
- Returns:
- 文件名
- Since:
- 5.7.15
-
getOutputStream
获得一个输出流对象- Parameters:
file
- 文件- Returns:
- 输出流对象
- Throws:
IOException
- IO异常
-
touch
创建文件及其父目录,如果这个文件存在,直接返回这个文件
此方法不对File对象类型做判断,如果File不存在,无法判断其类型- Parameters:
path
- 相对ClassPath的目录或者绝对路径目录,使用POSIX风格- Returns:
- 文件,若路径为null,返回null
- Throws:
RuntimeException
- IO异常
-
touch
创建文件及其父目录,如果这个文件存在,直接返回这个文件
此方法不对File对象类型做判断,如果File不存在,无法判断其类型- Parameters:
file
- 文件对象- Returns:
- 文件,若路径为null,返回null
- Throws:
IOException
- IO异常
-
file
创建File对象,自动识别相对或绝对路径,相对路径将自动从ClassPath下寻找- Parameters:
path
- 相对ClassPath的目录或者绝对路径目录- Returns:
- File
-
file
创建File对象
根据的路径构建文件,在Win下直接构建,在Linux下拆分路径单独构建 此方法会检查slip漏洞,漏洞说明见http://blog.nsfocus.net/zip-slip-2/- Parameters:
parent
- 父文件对象path
- 文件路径- Returns:
- File
-
getInputStream
获得输入流- Parameters:
file
- 文件- Returns:
- 输入流
- Throws:
IOException
- 文件未找到
-
getWriter
获得一个带缓存的写入对象- Parameters:
isAppend
- 是否追加- Returns:
- BufferedReader对象
- Throws:
IOException
- IO异常
-
getReader
获得一个文件读取器- Parameters:
file
- 文件charset
- 字符集- Returns:
- BufferedReader对象
- Throws:
RuntimeException
- IO异常
-
equals
检查两个文件是否是同一个文件
所谓文件相同,是指Path对象是否指向同一个文件或文件夹- Parameters:
file1
- 文件1file2
- 文件2- Returns:
- 是否相同
- Throws:
RuntimeException
- IO异常- Since:
- 5.4.1
- See Also:
-
equals
检查两个文件是否是同一个文件
所谓文件相同,是指File对象是否指向同一个文件或文件夹- Parameters:
file1
- 文件1file2
- 文件2- Returns:
- 是否相同
- Throws:
RuntimeException
- IO异常
-
pathEquals
文件路径是否相同
取两个文件的绝对路径比较,在Windows下忽略大小写,在Linux下不忽略。- Parameters:
file1
- 文件1file2
- 文件2- Returns:
- 文件路径是否相同
- Since:
- 3.0.9
-
checkSlip
检查父完整路径是否为自路径的前半部分,如果不是说明不是子路径,可能存在slip注入。见http://blog.nsfocus.net/zip-slip-2/
- Parameters:
parentFile
- 父文件或目录file
- 子文件或目录- Returns:
- 子文件或目录
- Throws:
IllegalArgumentException
- 检查创建的子文件不在父目录中抛出此异常
-
isSub
判断给定的目录是否为给定文件或文件夹的子目录- Parameters:
parent
- 父目录sub
- 子目录- Returns:
- 子目录是否为父目录的子目录
- Since:
- 4.5.4
-
isSub
判断给定的目录是否为给定文件或文件夹的子目录- Parameters:
parent
- 父目录sub
- 子目录- Returns:
- 子目录是否为父目录的子目录
- Since:
- 5.5.5
-
mkdirsSafely
安全地级联创建目录 (确保并发环境下能创建成功)并发环境下,假设 test 目录不存在,如果线程A mkdirs "test/A" 目录,线程B mkdirs "test/B"目录, 其中一个线程可能会失败,进而导致以下代码抛出 FileNotFoundException 异常 file.getParentFile().mkdirs(); // 父目录正在被另一个线程创建中,返回 false file.createNewFile(); // 抛出 IO 异常,因为该线程无法感知到父目录已被创建
- Parameters:
dir
- 待创建的目录tryCount
- 最大尝试次数sleepMillis
- 线程等待的毫秒数- Returns:
- true表示创建成功,false表示创建失败
- Since:
- 5.7.21
-
mkParentDirs
创建所给文件或目录的父目录- Parameters:
file
- 文件或目录- Returns:
- 父目录
-
getParent
获取指定层级的父路径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
- Parameters:
file
- 目录或文件level
- 层级- Returns:
- 路径File,如果不存在返回null
- Since:
- 4.1.2
-
mkdir
创建文件夹,会递归自动创建其不存在的父文件夹,如果存在直接返回此文件夹
此方法不对File对象类型做判断,如果File不存在,无法判断其类型- Parameters:
dir
- 目录- Returns:
- 创建的目录
-
copy
-
copy
public static void copy(File src, File dest, Boolean isOverride, Boolean isCopyAttributes) throws IOException - Throws:
IOException
-