模块 jmc.utils
程序包 com.jmc.io

类 Files

java.lang.Object
com.jmc.io.Files

public class Files extends Object
文件操作

时间: 2019.1.12

更新:

   2019.1.25     1. 增加“源文件是否为文件夹的判断”
                 2. 优化提示信息
   2019.1.27     1. 优化删除文件(删除一个有2100长文件夹只需38秒)
                 2. 添加多线程
   2019.1.28     添加随机存储
   2019.1.29     添加大文件通道(删除原有随机存储)
   2019.1.31     根据设备彻底优化,从最大程度避免出错
   2019.2.2      1. 加入zip压缩和解压
                 2. 加入文件的移动和重命名
   2019.2.3      1. 加入基础提示布尔值
                 2. 加入状态信息
   2019.2.17     加入输出和读取功能
   2019.2.27     读取改用FIS(BR末尾换行,故不采用)
   2019.2.28     输出功能加入追加模式
   2019.3.15     加入是否检查的布尔值
   2019.3.19     设置不抛出所有异常
   2019.3.23     复制功能加入追加模式
   2019.4.15     做到精准计算操作用时
   2019.5.3      通道均改为静态内部类方式
   2019.6.23     优化提示信息
   2019.7.3      加入输出字节码功能
   2019.8.22     1. 改输入字节码功能为readToBytes
                 2. 将readToBytes,outBytes作为输入输出主方法
   2019.8.23     1. 优化文件压缩和解压,及时关闭文件流和清除缓冲区
                 2. 删除out方法中检查文件完整性判断
   2019.8.24     1. 添加文件搜索功能
                 2. 优化文件信息统计
                 3. 删除结果保存功能
                 4. 删除多余成员变量
                 5. 删除是否复制到sd卡判断
                 6. 优化线程结束判断
   2019.8.25     1. 高级搜索功能添加过滤器
                 2. 调整流关闭顺序(先打开的后关闭,只需关闭Channel无需关闭文件流)
   2019.8.31     1. 加入线程池
                 2. 修改临时数组大小: 1024(1k) -> 8192(8k) 性能提升明显
   2019.9.13     1. 加入文件编码修改功能
                 2. 输入输出方法加入字符集参数
   2019.10.5     加入单文件搜索(findAny)方法
   2020.3.4      用非递归方式统计文件夹和搜索单文件,其中搜索单文件的速度明显加快
   2020.3.10     添加批量重命名方法
   2020.3.11     1. 修复文件信息方法中的统计错误(将初始文件夹的大小:4KB也统计进去了)
                 2. 添加文件长度转换方法
   2020.3.12     加入树状图统计文件夹功能
   2020.3.31     1. 加入批量移动和批量删除功能
                 2. 将批量方法集中并改名为寻找XX
                 3. 添加寻找复制方法
                 4. 添加findDO模板以统一化代码,并扩展findXX为orContains形式
   2020.4.1      1. 升级findToMap方法,可以输入多个搜索条件
                 2. 添加deletes方法
   2020.4.8      1. 添加outStream方法
                 2. 将所有out系列方法(outBytes, outStream)统一命名为out
                 3. 压缩方法添加“储存模式”可选项
                 4. 优化输出,使统计结果更加美观
   2020.4.9      将Streams类的流与文件方法移动到本类
   2020.4.17     添加按时间重命名方法
   2020.4.20     完善移动方法,使其能兼容不同分区的移动
   2020.8.7      1. 添加findFiles和findDirs方法
                 2. 将findToMap方法改名为findAll
                 3. 删除findAll第一个参数为File的重载方法
   2020.8.18     1. 将所有返回布尔值的方法改为返回void且出错时直接抛出运行时异常
                 2. 添加deletes参数为文件列表的重载方法
   2020.12.27    对源码进行大幅度调整优化,并添加相应方法注释
   2021.3.15     更新大文件复制通道代码,用NIO: ByteBuffer提高性能
   2021.7.8      使用logger代替basicDetails,showOperatingDetails
   2021.7.9      1. 删除部分out方法
                 2. 减少成员变量
                 3. findAll搜索结果改为类储存,提高辨识度
                 4. read方法用Charset类代替charsetName字符串参数,提高可读性
                 5. out方法默认采用非追加方式,方便调用
   2021.7.10     1. 更改方法次序,使其更合理
                 2. 添加mkdirs方法,规范创建多级目录
                 3. 用运行时异常代替所有的sout
   2021.7.22     优化文件树,使其返回实体对象并且自动按文件/文件夹自动降序排列
   2021.8.17     优化Logger打印,在其关闭情况下减少资源损耗(降低了20%耗时)
   2021.8.18     懒惰初始化Logger,减少能源损耗(降低3%耗时)
   2021.8.21     1. 内联ZipOutputThread和多个loop系列方法(copyLoop等),降低耦合度
                 2. 删除两个CopyThread,改为普通方法
                 3. 改进拷贝时目标文件路径推算算法,增强源码可读性
   2021.8.23     1. 修改Logger名称为类全限定名
                 2. 删除enableLog成员变量(boolean)
   2021.8.28     添加代码折叠,使总体结构更清晰
   2021.11.24    添加exists, createFile和delete(String...)方法
   2021.11.25    添加lines方法
   2022.3.5      当文件树展开文件夹失败时,改为打印错误日志而不是直接抛出异常
   2022.12.29    1. 添加getEncoding系列方法来查询文件编码
                 2. 添加setEncoding(file, newEncoding)方法来简化设置文件编码的调用
   2022.2.12     1. 添加list方法来列出一级目录的文件/文件夹
                 2. 添加默认参数,更改重载方法次序!
   2022.2.18     使用默认参数特性(@DefaultArg)重写具有默认参数的方法!
   2023.2.22     1. 将所有方法添加@apiNote以标注api示例代码
                 2. 删除findDO系列方法(findMoves,findDels等)
                 3. 添加必要的注释提高代码可读性
   2023.3.6      添加getAbsolutePath方法来从相对路径获取绝对路径
   2023.3.23     添加createTempFile和createTempDir方法来新建临时文件和文件夹
   2023.4.3      添加getParentPath方法来获取路径的父路径
   2023.7.12     1. 添加isFile和isDir方法
                 2. 删除findInfo方法
                 3. 添加getLength和getFileInfo方法
                 4. 添加getReadableLength方法
 
从以下版本开始:
1.0
  • 方法详细资料

    • enableLog

      public static void enableLog(boolean enable)
      设置是否打印日志
      参数:
      enable - 是否打印日志
      API Note:
      
       // 开启操作日志打印(复制,删除文件等情况下打印日志)
       Files.enableLog(true);
       
    • copy

      public static void copy(String srcPath, String desPath)
      复制文件或文件夹
      参数:
      srcPath - 源路径
      desPath - 目标路径
      API Note:
      
       // 将a.txt复制到dir文件夹
       Files.copy("./a.txt", "/path/to/dir");
      
       // 将a文件夹复制到/path/to/dir/a
       Files.copy("/path/to/a", "/path/to/dir");
       
    • copy

      public static void copy(File src, String destPath)
      复制文件或文件夹
      参数:
      src - 源文件
      destPath - 目标路径
      另请参阅:
    • move

      public static void move(String srcPath, String desPath)
      移动文件或文件夹
      参数:
      srcPath - 源路径
      desPath - 目标路径
      API Note:
      
       // 将a.txt移动到test文件夹
       Files.move("./a.txt", "path/to/test");
      
       // 将a文件夹移动到/path/to/test/a
       Files.move("/path/to/a", "/path/to/test");
       
    • move

      public static void move(File src, String desPath)
      移动文件或文件夹
      参数:
      src - 文件或文件夹的File对象
      desPath - 目标路径
      另请参阅:
    • rename

      public static void rename(String filePath, String newName)
      重命名文件或文件夹
      参数:
      filePath - 路径
      newName - 新名称
      API Note:
      
       // 将a.txt重命名为b.jpg
       Files.rename("/path/to/a.txt", "b.jpg");
      
       // 将a文件夹命名为b
       Files.rename("/path/to/a", "b");
       
    • rename

      public static void rename(File src, String newName)
      重命名文件或文件夹
      参数:
      src - 源文件
      newName - 新名称
      另请参阅:
    • delete

      public static void delete(String path)
      删除文件或文件夹
      参数:
      path - 路径
      API Note:
      
       // 删除a.txt
       Files.delete("./a.txt");
      
       // 删除a文件夹
       Files.delete("/path/to/a");
       
    • delete

      public static void delete(File src)
      删除文件或文件夹
      参数:
      src - 源文件的File对象
      另请参阅:
    • delete

      public static void delete(String... paths)
      删除多个文件或文件夹
      参数:
      paths - 多个路径
      从以下版本开始:
      1.8
      API Note:
      
       // 删除a.txt, b文件夹
       Files.delete("./a.txt", "/path/to/b");
       
    • delete

      public static void delete(File... fs)
      删除多个文件或文件夹
      参数:
      fs - 文件或文件夹
      另请参阅:
    • delete

      public static void delete(List<File> list)
      删除多个文件或文件夹
      参数:
      list - 文件列表
      API Note:
      
       // 文件,文件夹列表(包含a.txt和b文件夹)
       var list = List.of(new File("./a.txt"), new File("/path/to/b"));
       // 删除列表中的文件/文件夹
       Files.delete(list);
       
    • zip

      public static void zip(String srcPath, String zipPath, Boolean storeMode)
      压缩文件或文件夹
      参数:
      srcPath - 源路径
      zipPath - zip路径(可为空,默认是源路径)
      storeMode - 是否启用储存模式
      API Note:
      
       // 将a文件夹压缩为zip文件,生成在当前路径(/path/to/a.zip),不打开储存模式
       Files.zip("/path/to/a", null, null);
      
       // 将a.txt压缩为zip文件,生成在当前路径(/path/to/a.txt.zip),不打开储存模式
       Files.zip("./a.txt", null, null);
      
       // 将a文件夹压缩为zip文件,生成在/path/to/b/a.zip,不打开储存模式
       Files.zip("/path/to/a", "/path/to/b", null);
      
       // 将a文件夹压缩为zip文件,生成在/path/to/b/a.zip,打开储存模式(只固定,实际不压缩)
       Files.zip("/path/to/a", "/path/to/b", true);
       
    • zip

      public static void zip(String srcPath, Boolean storeMode)
      在本目录下创建压缩文件
      参数:
      srcPath - 源路径
      storeMode - 是否启用储存模式
      API Note:
      
       // 压缩a.txt,生成在/path/to/a.txt.zip,不启用储存模式
       Files.zip("/path/to/a.txt", false);
      
       // 压缩a文件夹,生成在/path/to/a.zip,启用储存模式(只固定,实际不压缩)
       Files.zip("/path/to/a", true);
       
    • zip

      public static void zip(String srcPath)
      在本目录下创建压缩文件(非储存模式)
      参数:
      srcPath - 源路径
      API Note:
      
       // 压缩a.txt,生成在/path/to/a.txt.zip,不启用储存模式
       Files.zip("/path/to/a.txt.zip");
      
       // 压缩a文件夹,生成在/path/to/a.zip,不启用储存模式
       Files.zip("/path/to/a");
       
    • zip

      public static void zip(File src, String zipPath, Boolean storeMode)
      压缩文件或文件夹
      参数:
      src - 源文件
      zipPath - zip路径(可为空,默认是源路径)
      storeMode - 是否启用储存模式(可为空,默认是否)
      另请参阅:
    • zip

      public static void zip(File src, Boolean storeMode)
      在本目录下创建压缩文件
      参数:
      src - 源文件
      storeMode - 是否启用储存模式
      另请参阅:
    • zip

      public static void zip(File src)
      在本目录下创建压缩文件(非储存模式)
      参数:
      src - 源文件
      另请参阅:
    • unzip

      public static void unzip(String zipPath, String desPath)
      解压文件
      参数:
      zipPath - zip路径
      desPath - 目标路径(可为空,默认是zip所在目录)
      API Note:
      
       // 解压a.zip到默当前目录(/path/to)
       Files.unzip("/path/to/a.zip", null);
      
       // 解压a.zip到/path/to/b
       Files.unzip("/path/to/a.zip", "/path/to/b");
       
    • unzip

      public static void unzip(String zipPath)
      在本目录下解压文件
      参数:
      zipPath - zip文件路径
      API Note:
      
       // 解压a.zip到/path/to
       Files.unzip("/path/to/a.zip");
       
    • unzip

      public static void unzip(File zip, String desPath)
      解压文件
      参数:
      zip - zip文件
      desPath - 目标路径
      另请参阅:
    • unzip

      public static void unzip(File zip)
      在本目录下解压文件
      参数:
      zip - zip文件
      另请参阅:
    • read

      public static String read(String path, Charset cs)
      读取文件到字符串
      参数:
      path - 源文件路径
      cs - 文件编码
      返回:
      结果字符串
      API Note:
      
       // 使用默认编码(UTF-8)读取a.txt到结果字符串
       String res = Files.read("./a.txt", null);
       // 使用GBK编码读取a.txt到结果字符串
       String res2 = Files.read("./a.txt", Charset.forName("GBK"));
       
    • read

      public static String read(String path)
      使用UTF-8编码读取文件到字符串
      参数:
      path - 源文件路径
      返回:
      结果字符串
      API Note:
      
       // 使用默认编码(UTF-8)读取a.txt到结果字符串
       String res = Files.read("./a.txt");
       
    • read

      public static String read(File src, Charset cs)
      读取文件到字符串
      参数:
      src - 源文件
      cs - 文件编码(可为空,默认是UTF-8)
      返回:
      结果字符串
      另请参阅:
    • read

      public static String read(File src)
      使用UTF-8编码读取文件到字符串
      参数:
      src - 源文件
      返回:
      结果字符串
      另请参阅:
    • readToBytes

      public static byte[] readToBytes(String path)
      读取文件到byte数组
      参数:
      path - 源路径
      返回:
      结果数组
      API Note:
      
       // 读取a.txt到byte数组
       var bs = Files.readToBytes("./a.txt");
       
    • readToBytes

      public static byte[] readToBytes(File src)
      读取文件到byte数组
      参数:
      src - 源文件
      返回:
      结果数组
      另请参阅:
    • list

      public static List<File> list(String path)
      列出一个目录的一级文件/文件夹
      参数:
      path - 文件夹路径
      返回:
      结果列表
      从以下版本开始:
      2.9
      API Note:
      
       // 列出a目录的一级文件/文件夹到列表中
       var list = Files.list("/path/to/a");
       
    • list

      public static List<File> list(File dir)
      列出一个目录的一级文件/文件夹
      参数:
      dir - 文件夹File对象
      返回:
      结果列表
      从以下版本开始:
      2.9
      另请参阅:
    • lines

      public static Stream<String> lines(String path, Charset cs)
      读取文件中的所有行到字符串流
      参数:
      path - 文件路径
      cs - 文件编码
      返回:
      所有行集合
      从以下版本开始:
      1.8
      API Note:
      
       // 获取a.txt所有行到Stream(使用默认UTF-8编码)并打印
       Files.lines("./a.txt", null)
            .forEach(System.out::println);
      
       // 获取a.txt所有行到Stream(使用GBK编码)并打印
       Files.lines("./a.txt", Charset.forName("GBK"))
            .forEach(System.out::println);
       
    • lines

      public static Stream<String> lines(String path)
      使用UTF-8编码读取文件中的所有行到字符串流
      参数:
      path - 文件路径
      返回:
      所有行集合
      从以下版本开始:
      1.8
      API Note:
      
       // 读取a.txt所有行到Stream(使用UTF-8编码)并打印
       Files.lines("./a.txt")
            .forEach(System.out::println);
       
    • lines

      public static Stream<String> lines(File src, Charset cs)
      读取文件中的所有行到字符串流
      参数:
      src - 文件对象
      cs - 文件编码(可为空,默认是UTF-8编码)
      返回:
      所有行集合
      从以下版本开始:
      1.8
      另请参阅:
    • lines

      public static Stream<String> lines(File src)
      使用UTF-8编码读取文件中的所有行到字符串流
      参数:
      src - 文件对象
      返回:
      所有行集合
      从以下版本开始:
      1.8
      另请参阅:
    • out

      public static void out(byte[] bs, String desPath, Boolean appendMode)
      把byte数组输出到文件
      参数:
      bs - byte数组
      desPath - 目标文件路径
      appendMode - 是否为追加模式
      API Note:
      
       // 将byte数组bs输出到a.txt中(非追加模式)
       Files.out(bs, "./a.txt", null);
      
       // 将byte数组bs输出到a.txt中(追加模式)
       Files.out(bs, "./a.txt", true);
       
    • out

      public static void out(byte[] bs, String desPath)
      用非追加模式把byte数组输出到文件
      参数:
      bs - byte数组
      desPath - 目标文件路径
      API Note:
      
       // 将byte数组bs输出到a.txt(非追加模式)
       Files.out(bs, "./a.txt");
       
    • out

      public static void out(byte[] bs, File desFile, Boolean appendMode)
      把byte数组输出到文件
      参数:
      bs - byte数组
      desFile - 目标文件
      appendMode - 是否为追加模式(可为空,默认否)
      另请参阅:
    • out

      public static void out(byte[] bs, File desFile)
      用非追加模式把byte数组输出到文件
      参数:
      bs - byte数组
      desFile - 目标文件
      另请参阅:
    • out

      public static void out(String s, String desPath, Charset charset, Boolean appendMode)
      输出字符串到文件
      参数:
      s - 字符串
      desPath - 文件路径
      charset - 目标文件编码
      appendMode - 是否用追加模式
      API Note:
      
       // 输出hello到a.txt(默认UTF-8编码,非追加模式)
       Files.out("hello", "./a.txt", null, null);
      
       // 输出hello到a.txt(GBK编码,追加模式)
       Files.out("hello", "./a.txt", Charset.forName("GBK"), true);
       
    • out

      public static void out(String s, String desPath, Boolean appendMode)
      使用UTF-8编码输出字符串到文件
      参数:
      s - 字符串
      desPath - 文件路径
      appendMode - 是否用追加模式
      API Note:
      
       // 使用UTF-8编码输出hello到a.txt(非追加模式)
       Files.out("hello", "./a.txt", null);
      
       // 使用UTF-8编码输出hello到a.txt(追加模式)
       Files.out("hello", "./a.txt", true);
       
    • out

      public static void out(String s, String desPath)
      使用非追加模式和UTF-8编码输出字符串到文件
      参数:
      s - 字符串
      desPath - 文件路径
      API Note:
      
       // 使用UTF-8编码,非追加模式将hello输出到a.txt
       Files.out("hello", "./a.txt");
       
    • out

      public static void out(String s, File des, Charset charset, Boolean appendMode)
      输出字符串到文件
      参数:
      s - 字符串
      des - 目标文件
      charset - 目标文件编码名称(可为空,默认UTF-8编码)
      appendMode - 是否用追加模式(可为空,默认否)
      另请参阅:
    • out

      public static void out(String s, File des, Boolean appendMode)
      使用UTF-8编码输出字符串到文件
      参数:
      s - 字符串
      des - 目标文件
      appendMode - 是否用追加模式
      另请参阅:
    • out

      public static void out(String s, File des)
      使用非追加模式和UTF-8编码输出字符串到文件
      参数:
      s - 字符串
      des - 目标文件
      另请参阅:
    • out

      public static void out(InputStream in, String path, boolean appendMode)
      输入流输出到文件
      参数:
      in - 输入流
      path - 文件路径
      appendMode - 是否用追加模式
      API Note:
      
       // 将输入流in输出到a.txt中(非追加模式)
       Files.out(in, "./a.txt", null);
      
       // 将输入流in输出到a.txt中(追加模式)
       Files.out(in, "./a.txt", true);
       
    • out

      public static void out(InputStream in, File des, boolean appendMode)
      输入流输出到文件
      参数:
      in - 输入流
      des - 文件File对象
      appendMode - 是否用追加模式
      另请参阅:
    • createFile

      public static void createFile(String path)
      创建新文件
      参数:
      path - 新文件路径
      从以下版本开始:
      1.8
      API Note:
      
       // 创建a.txt(父目录可以不存在)
       Files.createFile("/path/to/what/a.txt");
       
    • createFile

      public static void createFile(File f)
      创建新文件
      参数:
      f - 文件对象
      从以下版本开始:
      1.8
      另请参阅:
    • createTempFile

      public static String createTempFile()
      创建临时文件(名称是时间戳)
      返回:
      临时文件的绝对路径
      从以下版本开始:
      3.3
      API Note:
      
       // 创建临时文件,并接收临时文件的绝对路径
       var filePath = Files.createTempFile();
       
    • createTempFile

      public static String createTempFile(String fileName)
      创建临时文件
      参数:
      fileName - 文件名称
      返回:
      临时文件的绝对路径
      从以下版本开始:
      3.3
      API Note:
      
       // 创建a.txt,并接收临时文件的绝对路径
       var filePath = Files.createTempFile("a.txt");
       
    • createTempDir

      public static String createTempDir()
      创建临时文件夹(名称是时间戳)
      返回:
      临时文件夹的绝对路径
      从以下版本开始:
      3.3
      API Note:
      
       // 创建临时文件夹,并接收它的绝对路径
       var dirPath = Files.createTempDir();
      
       // 在临时文件夹中创建文件a.txt
       Files.createFile(dirPath + "/a.txt");
       
    • createTempDir

      public static String createTempDir(String dirName)
      创建临时文件夹
      参数:
      dirName - 文件夹名称
      返回:
      临时文件夹的绝对路径
      从以下版本开始:
      3.3
      API Note:
      
       // 创建临时文件夹dir,并接收它的绝对路径
       var dirPath = Files.createTempDir("dir");
      
       // 在临时文件夹dir中创建文件a.txt
       Files.createFile(dirPath + "/a.txt");
       
    • mkdirs

      public static void mkdirs(String path)
      创建多级目录
      参数:
      path - 多级目录路径
      API Note:
      
       // 创建a/b/c目录
       Files.mkdirs("/path/to/a/b/c");
       
    • mkdirs

      public static void mkdirs(File dir)
      创建多级目录
      参数:
      dir - 多级目录File对象
      另请参阅:
    • exists

      public static boolean exists(String path)
      判断文件/文件夹是否存在
      参数:
      path - 文件/文件夹路径
      返回:
      是否存在
      从以下版本开始:
      1.8
      API Note:
      
       // 判断a.txt是否存在
       boolean res = Files.exists("/path/to/a.txt");
       
    • exists

      public static boolean exists(File f)
      判断路径是否存在
      参数:
      f - 路径的File对象
      返回:
      是否存在
      从以下版本开始:
      1.8
      另请参阅:
    • isFile

      public static boolean isFile(String path)
      判断路径是否是文件
      参数:
      path - 文件路径
      返回:
      是否是文件
      从以下版本开始:
      3.6
      API Note:
      
       // 判断a.txt是否是文件
       boolean res = Files.isFile("/path/to/a.txt");
       
    • isFile

      public static boolean isFile(File f)
      判断路径是否是文件
      参数:
      f - 路径的File对象
      返回:
      是否是文件
      从以下版本开始:
      3.6
      另请参阅:
    • isDir

      public static boolean isDir(String path)
      判断路径是否是文件夹
      参数:
      path - 文件路径
      返回:
      是否是文件夹
      从以下版本开始:
      3.6
      API Note:
      
       // 判断a是否是文件夹
       boolean res = Files.isDir("/path/to/a");
       
    • isDir

      public static boolean isDir(File f)
      判断路径是否是文件夹
      参数:
      f - 路径的File对象
      返回:
      是否是文件夹
      从以下版本开始:
      3.6
      另请参阅:
    • getFileInfo

      public static Files.FileInfo getFileInfo(String path)
      文件信息
      参数:
      path - 文件/文件夹路径
      返回:
      FileInfo对象
      从以下版本开始:
      3.6
      API Note:
      
       // 获取a目录的信息
       FileInfo info = Files.getFileInfo("/path/to/a");
       long fileCount = fileInfo.fileCount();
       long dirCount = fileInfo.dirCount();
       long totalLength = fileInfo.totalLength();
      
       // 获取b.txt文件的信息
       FileInfo info2 = Files.getFileInfo("./b.txt");
       long
       
    • getFileInfo

      public static Files.FileInfo getFileInfo(File src)
      文件信息
      参数:
      src - 文件/文件夹的File对象
      返回:
      FileInfo对象
      从以下版本开始:
      3.6
      另请参阅:
    • getLength

      public static long getLength(String path)
      获取文件/文件夹的字节长度
      参数:
      path - 文件/文件夹路径
      返回:
      文件/文件夹字节长度
      从以下版本开始:
      3.6
      API Note:
      
       // 获取a.jpg的文件字节长度
       long length = Files.getLength("/path/to/a.jpg");
       // 获取b文件夹的字节总长度
       long length = Files.getLength("/path/to/b");
       
    • getLength

      public static long getLength(File src)
      获取文件/文件夹的字节长度
      参数:
      src - 文件/文件夹的File对象
      返回:
      文件/文件夹字节长度
      从以下版本开始:
      3.6
      另请参阅:
    • getReadableLength

      public static String getReadableLength(String path)
      获取文件/文件夹的人类可读长度
      参数:
      path - 文件/文件夹路径
      返回:
      文件/文件夹的人类可读长度
      从以下版本开始:
      3.6
    • getReadableLength

      public static String getReadableLength(File src)
      获取文件/文件夹的人类可读长度
      参数:
      src - 文件/文件夹的File对象
      返回:
      文件/文件夹的人类可读长度
      从以下版本开始:
      3.6
      另请参阅:
    • getParentPath

      public static String getParentPath(String path)
      获取指定路径的父路径
      参数:
      path - 指定路径
      返回:
      父路径
      从以下版本开始:
      3.4
      API Note:
      
       // 获取a.txt的父路径
       var parentPath = Files.getParentPath("/path/to/a.txt");
       
    • getAbsolutePath

      public static String getAbsolutePath(String relativePath)
      从相对路径获取绝对路径
      参数:
      relativePath - 相对路径
      返回:
      绝对路径字符串
      从以下版本开始:
      3.2
      API Note:
      
       // 获取a.txt的绝对路径
       var absolutePath = Files.getAbsolutePath("./a.txt");
       
    • getEncoding

      public static Optional<Charset> getEncoding(String path)
      获取文件的编码字符集
      参数:
      path - 文件路径
      返回:
      编码字符集
      从以下版本开始:
      2.7
      API Note:
      
       // 获取a.txt的编码字符集
       Charset c = Files.getEncoding("./a.txt").orElseThrow();
       
    • getEncoding

      public static Optional<Charset> getEncoding(File f)
      获取文件的编码字符集
      参数:
      f - 文件对象
      返回:
      编码字符集
      从以下版本开始:
      2.7
      另请参阅:
    • setEncoding

      public static void setEncoding(String path, Charset newCharset)
      设置文件编码(自动识别原编码)
      参数:
      path - 源文件路径
      newCharset - 新编码
      从以下版本开始:
      2.7
      API Note:
      
       // 设置a.txt的编码为GBK
       Files.setEncoding("./a.txt", Charset.forName("GBK"));
       
    • setEncoding

      public static void setEncoding(File src, Charset newCharset)
      设置文件编码(自动识别原编码)
      参数:
      src - 源文件
      newCharset - 新编码名称
      从以下版本开始:
      2.7
      另请参阅:
    • setEncoding

      public static void setEncoding(String path, Charset oldCharset, Charset newCharset)
      设置文件编码
      参数:
      path - 源文件路径
      oldCharset - 旧编码
      newCharset - 新编码
      API Note:
      
       // 将原来UTF-8编码的a.txt设置为GBK编码
       Files.setEncoding("./a.txt", StandardCharsets.UTF_8, Charset.forName("GBK"));
       
    • setEncoding

      public static void setEncoding(File src, Charset oldCharset, Charset newCharset)
      设置文件编码
      参数:
      src - 源文件
      oldCharset - 旧编码名称
      newCharset - 新编码名称
      另请参阅:
    • renameByTime

      public static void renameByTime(String dirPath, String suffix)
      按时间重命名(升序)
      参数:
      dirPath - 搜索文件夹路径
      suffix - 后缀(含小数点)
      API Note:
      
       // 将a文件夹中一级目录所有文件按照时间重命名为jpg类型
       // 时间越早序号越小,重命名结果是:1.jpg, 2.jpg, ...
       Files.renameByTime("/path/to/a", ".jpg");
       
    • renameByTime

      public static void renameByTime(File dir, String suffix)
      按时间重命名
      参数:
      dir - 搜索文件夹对象
      suffix - 后缀(含小数点)
      另请参阅:
    • findAll

      public static Files.FindResult findAll(String dirPath, FileFilter filter)
      搜索路径下符合要求的所有文件和文件夹
      参数:
      dirPath - 搜索文件夹路径
      filter - 文件过滤器
      返回:
      含结果文件和文件夹的集合
      API Note:
      
       // 在a目录中查找名称中包含jmc的文件/文件夹
       var findResult = Files.findAll("/path/to/a", f.getName().contains("jmc"));
       // 获取文件列表
       var files = findResult.files();
       // 获取文件夹列表
       var dirs = findResult.dirs();
       
    • findAll

      public static Files.FindResult findAll(String dirPath, String... contains)
      搜索路径下符合要求的所有文件和文件夹
      参数:
      dirPath - 搜索文件夹路径
      contains - 文件或文件夹名称中包含的内容
      返回:
      含结果文件和文件夹的集合
      API Note:
      
       // 在a目录中查找名称包含jmc或者utils的文件/文件夹
       var findResult = Files.findAll("/path/to/a", "jmc", "utils");
       // 获取文件列表
       var files = findResult.files();
       // 获取文件夹列表
       var dirs = findResult.dirs();
       
    • findFiles

      public static List<File> findFiles(String dirPath, FileFilter filter)
      搜索路径下符合要求的所有文件
      参数:
      dirPath - 搜索文件夹路径
      filter - 文件过滤器
      返回:
      含结果文件的列表
      API Note:
      
       // 在a目录中查找名称包含jmc的文件
       List<File> res = Files.findFiles("/path/to/a", f -> f.getName().contains("jmc"));
       
    • findFiles

      public static List<File> findFiles(String dirPath, String... contains)
      搜索路径下符合要求的所有文件
      参数:
      dirPath - 搜索文件夹路径
      contains - 文件名称中包含的内容
      返回:
      含结果文件的列表
      API Note:
      
       // 在a目录中查找名称包含jmc或者utils的文件
       List<File> res = Files.findFiles("/path/to/a", "jmc", "utils");
       
    • findDirs

      public static List<File> findDirs(String dirPath, FileFilter filter)
      搜索路径下符合要求的所有文件夹
      参数:
      dirPath - 搜索文件夹路径
      filter - 文件过滤器
      返回:
      含结果文件夹的列表
      API Note:
      
       // 在a目录中查找名称包含jmc的文件夹
       List<File> res = Files.findDirs("/path/to/a", f -> f.getName().contains("jmc"));
       
    • findDirs

      public static List<File> findDirs(String dirPath, String... contains)
      搜索路径下符合要求的所有文件夹
      参数:
      dirPath - 搜索文件夹路径
      contains - 文件夹名称中包含的内容
      返回:
      含结果文件的列表
      API Note:
      
       // 在a目录中查找名称包含jmc或者utils的文件夹
       List<File> res = Files.findDirs("/path/to/a", "jmc", "utils");
       
    • findAny

      public static File findAny(String path, String contains)
      搜索单个文件
      参数:
      path - 搜索文件夹路径
      contains - 文件名称包含内容
      返回:
      搜索结果
      API Note:
      
       // 在a目录中查找名称中包含jmc的任意一个文件
       File res = findAny("/path/to/a", "jmc");
       
    • findAny

      public static File findAny(File dir, String contains)
      搜索单个文件
      参数:
      dir - 搜索的文件夹
      contains - 文件名称包含内容
      返回:
      搜索结果
      另请参阅:
    • tree

      public static Files.FileTree tree(String path, int depth, double minMBSize)
      树状图统计文件夹
      参数:
      path - 统计文件夹路径
      depth - 搜索深度
      minMBSize - 结果中的文件/文件夹最小多少MB
      返回:
      文件树对象
      API Note:
      
       // 获取a目录的文件和文件夹树状图,搜索深度是3,结果包含的文件/文件夹最小的大小为50MB
       var fileTree = Files.tree("/path/to/a", 3, 50);
       // 打印树状图
       System.out.println(fileTree);
       
    • tree

      public static Files.FileTree tree(File dir, int depth, double minMBSize)
      树状图统计文件夹
      参数:
      dir - 搜索文件夹
      depth - 搜索深度
      minMBSize - 结果中的文件/文件夹最小多少MB
      返回:
      文件树对象
      另请参阅:
    • normalTree

      public static Files.FileTree normalTree(String path)
      普通树状图(搜索深度5层,结果中文件/文件夹最小大小为50MB)
      参数:
      path - 搜索文件夹路径
      返回:
      文件树对象
      API Note:
      
       // 获取a目录的文件和文件夹的普通树状图(搜索深度5层,结果中文件/文件夹最小大小为50MB)
       var fileTree = Files.normalTree("/path/to/a");
       // 打印树状图
       System.out.println(fileTree);
       
    • normalTree

      public static Files.FileTree normalTree(File dir)
      普通树状图(搜索深度5层,结果中文件/文件夹最小大小为50MB)
      参数:
      dir - 搜索文件夹
      返回:
      文件树对象
      另请参阅:
    • singleTree

      public static Files.FileTree singleTree(String path)
      单层树状图(结果中文件/文件夹最小大小为50MB)
      参数:
      path - 搜索文件夹路径
      返回:
      文件树对象
      API Note:
      
       // 获取a目录的文件和文件夹的单层树状图(结果中文件/文件夹最小大小为50MB)
       var fileTree = Files.singleTree("/path/to/a");
       // 打印树状图
       System.out.println(fileTree);
       
    • singleTree

      public static Files.FileTree singleTree(File dir)
      单层树状图(结果中文件/文件夹最小大小为50MB)
      参数:
      dir - 搜索文件夹
      返回:
      文件树对象
      另请参阅:
    • wholeTree

      public static Files.FileTree wholeTree(String path)
      完整树状图(层数、文件/文件夹大小无限制)
      参数:
      path - 搜索文件夹路径
      返回:
      文件树对象
      API Note:
      
       // 获取a目录的文件和文件夹的完整树状图(层数,文件/文件夹大小无限制)
       var fileTree = Files.wholeTree("/path/to/a");
       // 打印树状图
       System.out.println(fileTree);
       
    • wholeTree

      public static Files.FileTree wholeTree(File dir)
      完整树状图(层数、文件/文件夹大小无限制)
      参数:
      dir - 搜索文件夹
      返回:
      文件树对象
      另请参阅: