• 梳理common-io工具包



    title: 梳理common-io工具包
    comments: false
    date: 2019-08-28 14:21:58
    description: 对common-io工具包中的常用类进行整理,避免重复造轮子.
    categories: Java


    概述

    今天再对 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

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

  • 相关阅读:
    面向对象(二)-特性
    面向对象(一)-初步认识
    函数(十)-内置模块
    函数(九)-包与模块
    函数(八)-闭包与装饰器
    函数(七)-嵌套作用域
    函数(六)-匿名函数
    CSS阴影效果(Box-shadow)用法趣味讲解
    css 实现div内显示两行或三行,超出部分用省略号显示
    js基础知识(一)--截取字符串
  • 原文地址:https://www.cnblogs.com/wuqinglong/p/11424992.html
Copyright © 2020-2023  润新知