蜗牛大师

吴庆龙的学习笔记

导航

梳理common-io工具包

概述

今天再对 common-io 工具包进行一番梳理, 不得不说这些工具包实在是太实用了, 之前一直没注意也没有去了解这些工具包提供的功能, 所以一些工具包还是自己开发, 一些基本的文件操作也是自己写, 效率有点低.

排序(comparator)

该包下的类实现了 Comparator<File> 接口, 用于进行文件的排序操作, 比如:

  • 使用名字排序: NameFileComparator
  • 使用扩展名排序: ExtensionFileComparator
  • 使用文件大小排序: SizeFileComparator

过滤(filter)

提供了很多过滤器, 每个过滤器的类注释都说的很明白, 过滤器的名字也起的很明了, 这里挑选几个进行说明:

  • DirectoryFileFilter : 目录过滤器, 只返回目录
  • FileFileFilter : 文件过滤器, 只返回文件
  • HiddenFileFilter : 隐藏文件过滤器, 只返回隐藏文件
  • MagicNumberFileFilter : 过滤指定魔数的文件
  • NameFileFilter : 通过名字进行过滤
  • RegexFileFilter : 通过正则表达式进行过滤
  • SizeFileFilter : 通过文件大小进行过滤
  • PrefixFileFilter/SuffixFileFilter : 通过前缀或后缀进行过滤
  • WildcardFileFilter : 通过通配符进行过滤

使用:

File dir = new File(".");
String[] files = dir.list( new NameFileFilter("Test") );
for ( int i = 0; i &lt; files.length; i++ ) {
    System.out.println(files[i]);
}

// 或
FileFilterUtils#nameFileFilter(String)

输入流(input)

包中的类都有详细的注释, 类名也见名知意, 很好.

  • BOMInputStream : 可以判断文件是否含有 BOM 头
  • Tailer : Simple implementation of the unix "tail -f" functionality.

输出流(output)

  • ByteArrayOutputStream : 与标准的 ByteArrayOutputStream 提供的功能差不多
  • TeeOutputStream : Classic splitter of OutputStream. Named after the unix 'tee' command.

监视器(monitor)

FileAlterationListenerAdaptor : 监控文件或目录的创建删除修改等等. 使用 FileAlterationObserver 类进行操作.

例如:

File directory = new File(new File("."), "src");
FileAlterationObserver observer = new FileAlterationObserver(directory);
observer.addListener(new FileAlterationListenerAdaptor(){
  @Override
  public void onStart(FileAlterationObserver observer) {
    System.out.println("onStart");
  }

  @Override
  public void onDirectoryCreate(File directory) {
    System.out.println("onDirectoryCreate");
  }

  @Override
  public void onDirectoryChange(File directory) {
    System.out.println("onDirectoryChange");
  }

  @Override
  public void onDirectoryDelete(File directory) {
    System.out.println("onDirectoryDelete");
  }

  @Override
  public void onFileCreate(File file) {
    System.out.println("onFileCreate");
  }

  @Override
  public void onFileChange(File file) {
    System.out.println("onFileChange");
  }

  @Override
  public void onFileDelete(File file) {
    System.out.println("onFileDelete");
  }

  @Override
  public void onStop(FileAlterationObserver observer) {
    System.out.println("onStop");
  }
});

FileAlterationMonitor monitor = new FileAlterationMonitor(1000);
monitor.addObserver(observer);
monitor.start();

File file = new File(directory, "abc");
file.mkdirs();

monitor.stop();

FilenameUtils

封装了关于文件名称的相关操作. 类和方法上的注释写的都很清楚, 知道有这么一个工具即可.

FileUtils

大致提供了一下功能:

  • 获取临时目录
  • 获取用户目录
  • [强制]创建目录/文件
  • 列出目录下的文件或目录
  • 遍历文件或目录
  • 复制文件或目录
  • 删除目录或文件, 强制删除, 在虚拟机退出时删除
  • 读取/写入文件
  • 获取文件大小
  • 移动文件/目录
  • 是否是连接文件

IoUtils

这个不常用, 因为更底层, 大部分需求都是用 FileUtils 就可以解决了.

LineIterator

LineIterator it = FileUtils.lineIterator(file, "UTF-8");
try {
  while (it.hasNext()) {
    String line = it.nextLine();
    // do something with line
  }
} finally {
	it.close();
}

ThreadMonitor

监视线程, 如果达到指定的超时, 则中断该线程.

posted on 2019-08-28 16:49  蜗牛大师  阅读(797)  评论(1编辑  收藏  举报