Class FileTools

java.lang.Object
com.luna.common.file.FileTools

public class FileTools extends Object
Author:
Luna
  • Constructor Details

    • FileTools

      public FileTools()
  • Method Details

    • getTmpDirPath

      public static String getTmpDirPath()
      获取临时文件路径(绝对路径)
      Returns:
      临时文件路径
      Since:
      4.0.6
    • getTmpDir

      public static File getTmpDir()
      获取临时文件目录
      Returns:
      临时文件目录
      Since:
      4.0.6
    • getUserHomePath

      public static String getUserHomePath()
      获取用户路径(绝对路径)
      Returns:
      用户路径
      Since:
      4.0.6
    • getUserHomeDir

      public static File getUserHomeDir()
      获取用户目录
      Returns:
      用户目录
      Since:
      4.0.6
    • readAllLines

      public static List<String> readAllLines(String fileName)
      读取文件所有内容
      Parameters:
      fileName - 文件路径带文件名
      Returns:
      List
    • deleteIfExists

      public static void deleteIfExists(String file)
      删除文件或空目录
      Parameters:
      file - 文件目录 或者 文件名
    • isExists

      public static boolean isExists(String fileName)
      判断一个文件是否存在
      Parameters:
      fileName - 文件路径
      Returns:
      boolean
    • notExists

      public static boolean notExists(String fileName)
      判断一个文件是否存在
      Parameters:
      fileName - 文件路径
      Returns:
      boolean
    • write

      public static void write(byte[] bytes, String fileName)
      字节写入文件
      Parameters:
      bytes - 字节数组
      fileName - 文件路径
    • write

      public static File write(InputStream in, File file, boolean isCloseIn) throws IOException
      将流的内容写入文件
      Parameters:
      in - 输入流,不关闭
      isCloseIn - 是否关闭输入流
      Returns:
      dest
      Throws:
      IOException - IO异常
      Since:
      5.5.2
    • write

      public static File write(InputStream in, String file, boolean isCloseIn) throws IOException
      将流的内容写入文件
      Parameters:
      in - 输入流,不关闭
      isCloseIn - 是否关闭输入流
      Returns:
      dest
      Throws:
      IOException - IO异常
      Since:
      5.5.2
    • write

      public static void write(String content, String fileName)
      字符串写入文件
      Parameters:
      fileName - 文件路径
      content - 文本内容
      Throws:
      IOException - 写入异常
    • read

      public static byte[] read(String fileName)
      文件读取字节
      Parameters:
      fileName - 文件路径
      Returns:
      字节数组
    • count

      public static long count(String filePath)
      计算文件中行数
      Parameters:
      filePath - 文件地址
      Returns:
      long 行数
      Throws:
      RuntimeException
    • read

      public static List<String> read(String filePath, int skip, int row)
    • download

      public static void download(String url, String file)
      下载文件

      若文件已存在,覆盖

      有异常时抛出异常

      Parameters:
      url - 网络地址
      file - 文件地址
    • downloadWithRetry

      public static void downloadWithRetry(String url, String file, int maxRetry)
      下载文件,失败在优先次数内重试
      Parameters:
      url - 网络路径
      file - 保存文件地址
      maxRetry - 重试次数
    • writeStringToFile

      public static void writeStringToFile(String path, String content)
      写入文件
      Parameters:
      path - 文件路径
      content - 写入内容
    • createDirectory

      public static void createDirectory(String pathDir)
      路径创建文件夹
      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

      public static void writeStringToFile(File file, String content, Charset destCharset)
      写入文件 不存在抛出异常
      Parameters:
      file - 文件路径
      content - 文件内容
      destCharset - 编码格式
    • readFileToString

      public static String readFileToString(String path)
      读取文件
      Parameters:
      path - 文件全路径
    • readFileToString

      public static String readFileToString(String path, Charset destCharset)
      读取文件
      Parameters:
      path - 文件全路径
      destCharset - 文件编码
    • readFileToString

      public static String readFileToString(File file, Charset destCharset)
      读取文件
      Parameters:
      file - 文件
      destCharset - 文件编码
    • rename

      public static File rename(File file, String newName, boolean isOverride)
      修改文件或目录的文件名,不变更路径,只是简单修改文件名,不保留扩展名。
       FileUtil.rename(file, "aaa.png", true) xx/xx.png =》xx/aaa.png
       
      Parameters:
      file - 被修改的文件
      newName - 新的文件名,如需扩展名,需自行在此参数加上,原文件名的扩展名不会被保留
      isOverride - 是否覆盖目标文件
      Returns:
      目标文件
      Since:
      5.3.6
    • rename

      public static File rename(File file, String newName, boolean isRetainExt, boolean isOverride)
      修改文件或目录的文件名,不变更路径,只是简单修改文件名
      重命名有两种模式:
      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

      public static Path rename(Path path, String newName, boolean isOverride)
      修改文件或目录的文件名,不变更路径,只是简单修改文件名
       FileUtil.rename(file, "aaa.jpg", false) xx/xx.png =》xx/aaa.jpg
       
      Parameters:
      path - 被修改的文件
      newName - 新的文件名,包括扩展名
      isOverride - 是否覆盖目标文件
      Returns:
      目标文件Path
      Since:
      5.4.1
    • move

      public static Path move(Path src, Path target, boolean isOverride)
      移动文件或目录
      当目标是目录时,会将源文件或文件夹整体移动至目标目录下
      例如:move("/usr/aaa", "/usr/bbb")结果为:"/usr/bbb/aaa"
      Parameters:
      src - 源文件或目录路径
      target - 目标路径,如果为目录,则移动到此目录下
      isOverride - 是否覆盖目标文件
      Returns:
      目标文件Path
      Since:
      5.5.1
    • cleanDirectory

      public static void cleanDirectory(String path)
      清空目录下所有文件
      Parameters:
      path - 目录路径
    • cleanDirectory

      public static void cleanDirectory(String path, boolean parent)
      清空目录下所有文件
      Parameters:
      path - 目录路径
      parent - 路径为文件时,是否从父路径清除
    • cleanDirectory

      public static void cleanDirectory(File file, boolean parent)
      清空目录下所有文件
      Parameters:
      file - 文件系统
      parent - 路径为文件时,是否从父路径清除
    • getName

      public static String getName(Path path)
      获取Path文件名
      Parameters:
      path - Path
      Returns:
      文件名
      Since:
      5.7.15
    • getOutputStream

      public static BufferedOutputStream getOutputStream(File file)
      获得一个输出流对象
      Parameters:
      file - 文件
      Returns:
      输出流对象
      Throws:
      IOException - IO异常
    • touch

      public static File touch(String path) throws RuntimeException
      创建文件及其父目录,如果这个文件存在,直接返回这个文件
      此方法不对File对象类型做判断,如果File不存在,无法判断其类型
      Parameters:
      path - 相对ClassPath的目录或者绝对路径目录,使用POSIX风格
      Returns:
      文件,若路径为null,返回null
      Throws:
      RuntimeException - IO异常
    • touch

      public static File touch(File file)
      创建文件及其父目录,如果这个文件存在,直接返回这个文件
      此方法不对File对象类型做判断,如果File不存在,无法判断其类型
      Parameters:
      file - 文件对象
      Returns:
      文件,若路径为null,返回null
      Throws:
      IOException - IO异常
    • file

      public static File file(String path)
      创建File对象,自动识别相对或绝对路径,相对路径将自动从ClassPath下寻找
      Parameters:
      path - 相对ClassPath的目录或者绝对路径目录
      Returns:
      File
    • file

      public static File file(File parent, String path)
      创建File对象
      根据的路径构建文件,在Win下直接构建,在Linux下拆分路径单独构建 此方法会检查slip漏洞,漏洞说明见http://blog.nsfocus.net/zip-slip-2/
      Parameters:
      parent - 父文件对象
      path - 文件路径
      Returns:
      File
    • getInputStream

      public static BufferedInputStream getInputStream(File file)
      获得输入流
      Parameters:
      file - 文件
      Returns:
      输入流
      Throws:
      IOException - 文件未找到
    • getWriter

      public static BufferedWriter getWriter(File file, Charset charset, boolean isAppend)
      获得一个带缓存的写入对象
      Parameters:
      isAppend - 是否追加
      Returns:
      BufferedReader对象
      Throws:
      IOException - IO异常
    • getReader

      public static BufferedReader getReader(File file, Charset charset)
      获得一个文件读取器
      Parameters:
      file - 文件
      charset - 字符集
      Returns:
      BufferedReader对象
      Throws:
      RuntimeException - IO异常
    • equals

      public static boolean equals(Path file1, Path file2) throws RuntimeException
      检查两个文件是否是同一个文件
      所谓文件相同,是指Path对象是否指向同一个文件或文件夹
      Parameters:
      file1 - 文件1
      file2 - 文件2
      Returns:
      是否相同
      Throws:
      RuntimeException - IO异常
      Since:
      5.4.1
      See Also:
    • equals

      public static boolean equals(File file1, File file2) throws RuntimeException
      检查两个文件是否是同一个文件
      所谓文件相同,是指File对象是否指向同一个文件或文件夹
      Parameters:
      file1 - 文件1
      file2 - 文件2
      Returns:
      是否相同
      Throws:
      RuntimeException - IO异常
    • pathEquals

      public static boolean pathEquals(File file1, File file2)
      文件路径是否相同
      取两个文件的绝对路径比较,在Windows下忽略大小写,在Linux下不忽略。
      Parameters:
      file1 - 文件1
      file2 - 文件2
      Returns:
      文件路径是否相同
      Since:
      3.0.9
    • checkSlip

      public static File checkSlip(File parentFile, File file) throws IllegalArgumentException
      检查父完整路径是否为自路径的前半部分,如果不是说明不是子路径,可能存在slip注入。

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

      Parameters:
      parentFile - 父文件或目录
      file - 子文件或目录
      Returns:
      子文件或目录
      Throws:
      IllegalArgumentException - 检查创建的子文件不在父目录中抛出此异常
    • isSub

      public static boolean isSub(File parent, File sub)
      判断给定的目录是否为给定文件或文件夹的子目录
      Parameters:
      parent - 父目录
      sub - 子目录
      Returns:
      子目录是否为父目录的子目录
      Since:
      4.5.4
    • isSub

      public static boolean isSub(Path parent, Path sub)
      判断给定的目录是否为给定文件或文件夹的子目录
      Parameters:
      parent - 父目录
      sub - 子目录
      Returns:
      子目录是否为父目录的子目录
      Since:
      5.5.5
    • mkdirsSafely

      public static boolean mkdirsSafely(File dir, int tryCount, long sleepMillis)
      安全地级联创建目录 (确保并发环境下能创建成功)
           并发环境下,假设 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

      public static File mkParentDirs(File file)
      创建所给文件或目录的父目录
      Parameters:
      file - 文件或目录
      Returns:
      父目录
    • getParent

      public static File getParent(File file, int level)
      获取指定层级的父路径
       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

      public static File mkdir(File dir)
      创建文件夹,会递归自动创建其不存在的父文件夹,如果存在直接返回此文件夹
      此方法不对File对象类型做判断,如果File不存在,无法判断其类型
      Parameters:
      dir - 目录
      Returns:
      创建的目录
    • copy

      public static void copy(File src, File dest)
    • copy

      public static void copy(File src, File dest, Boolean isOverride, Boolean isCopyAttributes) throws IOException
      Throws:
      IOException