Apache Commons

Apache Commons

官网

https://commons.apache.org/

Commons IO

maven依赖

<!-- https://mvnrepository.com/artifact/commons-io/commons-io -->
<dependency>
    <groupId>commons-io</groupId>
    <artifactId>commons-io</artifactId>
    <version>2.6</version>
</dependency>

文档

https://commons.apache.org/proper/commons-io/javadocs/api-release/index.html

常用方法

  • 计算文件夹或者文件的大小
/**
 * 计算文件夹或者文件的大小
 * @author YINMK
 */
public class CommonsIODemo {
    public static void main(String[] args) {
        File file = new File("D:\\windows.iso");
        File dic = new File("D:\\data");

        //获取文件的大小 单位:b
        long fileSize = FileUtils.sizeOf(file);
        System.out.println(fileSize);

        //获取文件夹大小
        long dicSize = FileUtils.sizeOf(dic);
        System.out.println(dicSize);
    }
}
  • 列出子孙集
  /**
   * 列出子孙集
   *
   * @author YINMK
   */
  public class CommonsIODemo {
      public static void main(String[] args) {
          File file = new File("D:\\windows.iso");
          File dic = new File("D:\\data");
  
          // 参数:
          // 1.要操作的目录
          // 2.使用的过滤器(不要空文件)
          // 3.指定要操作的是目录
          Collection<File> files = FileUtils.listFiles(dic, EmptyFileFilter.NOT_EMPTY, DirectoryFileFilter.INSTANCE);
          for (File file1 : files) {
              System.out.println(file1.getAbsolutePath());
          }
  
          // 参数:
          // 1.要操作的目录
          // 2.使用的过滤器(只要.java后缀)
          // 3.指定要操作的是目录
          // 2:第一:给一个目录,第二:过滤器(要java后缀),第三:操作目录
          Collection<File> files2 = FileUtils.listFiles(dic, new SuffixFileFilter("java"), DirectoryFileFilter.INSTANCE);
          for (File file2 : files2) {
              System.out.println(file2.getAbsolutePath());
          }
  
          // 使用多个过滤器--or(例:文件为空或者后缀为java)
          Collection<File> files3 = FileUtils.listFiles(dic, FileFilterUtils.or(new SuffixFileFilter("java"), EmptyFileFilter.EMPTY), DirectoryFileFilter.INSTANCE);
          for (File file3 : files3) {
              System.out.println(file3.getAbsolutePath());
          }
  
          // 使用多个过滤器--and(例:文件既要空也要后缀txt)
          Collection<File> files4 = FileUtils.listFiles(dic, FileFilterUtils.and(new SuffixFileFilter("txt"), EmptyFileFilter.EMPTY), DirectoryFileFilter.INSTANCE);
          for (File file4 : files4) {
              System.out.println(file4.getAbsolutePath());
          }
      }
  }
  • 读取文件
/**
 * 读取文件
 *
 * @author YINMK
 */
public class CommonsIODemo {
    public static void main(String[] args) throws IOException {
        File file = new File("D:\\yinmk.txt");
        //读取文件

        //输出内容
        String str = FileUtils.readFileToString(file, "UTF-8");
        System.out.println(str);

        //输出大小
        byte[] by = FileUtils.readFileToByteArray(file);
        System.out.println(by.length);

        System.out.println("************分割线*******************");

        //逐行读取
        List<String> msgs = FileUtils.readLines(file, "UTF-8");
        for (String string : msgs) {
            System.out.println(string);
        }

        System.out.println("************分割线*******************");

        //使用迭代器逐行读取
        LineIterator it = FileUtils.lineIterator(file, "UTF-8");
        while (it.hasNext()) {
            System.out.println(it.nextLine());
        }

    }
}
  • 写出到文件
/**
 * 写出到文件
 *
 * @author YINMK
 */
public class CommonsIODemo {
    public static void main(String[] args) throws IOException {
        File file = new File("D:\\yinmk.txt");

        //普通写出到文件
        FileUtils.write(file, "床前明月光\r\n", "UTF-8");
        //用String写出到文件 最后一个参数是false会覆盖原有内容
        FileUtils.writeStringToFile(file, "疑是地上霜\r\n", "UTF-8", true);
        //用字节流写出到文件
        FileUtils.writeByteArrayToFile(file, "举头望明月\r\n".getBytes(StandardCharsets.UTF_8), true);

        //写出列表到文件
        List<String> list = new ArrayList<>();
        list.add("鹅鹅鹅");
        list.add("曲项向天歌");
        list.add("白毛浮绿水");
        list.add("红掌拨清波");
        FileUtils.writeLines(file, list, "\n", true);
    }
}
  • 拷贝文件
/**
 * 拷贝文件
 *
 * @author YINMK
 */
public class CommonsIODemo {
    public static void main(String[] args) throws IOException {
        File file = new File("D:\\yinmk.txt");

        //复制文件
        FileUtils.copyFile(file, new File("D:\\newyinmk.txt"));
        
        //复制文件到目录
        FileUtils.copyFileToDirectory(file, new File("D:\\lib"));
        
        //复制目录
        FileUtils.copyDirectory(new File("D:\\lib"), new File("D:\\lib-Copy"));
        
        //复制目录到目录(lib拷贝为lib2的子目录)
        FileUtils.copyDirectoryToDirectory(new File("D:\\lib"), new File("D:\\lib2"));

        //复制URL内容
        String url = "https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1575221054069&di=041e198e7cbd68b04d8d7e8211548ac0&imgtype=0&src=http%3A%2F%2Fp2.cri.cn%2FM00%2F4E%2F38%2FCqgNOlo3YDWAb-y2AAAAAAAAAAA690.600x300.jpg";
        FileUtils.copyURLToFile(new URL(url), new File("D:\\marvel.jpg"));

        //URL字符
        String datas = IOUtils.toString(new URL("http://www.baidu.com"), StandardCharsets.UTF_8);
        System.out.println(datas);
    }
}