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

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

梳理common-io工具包的更多相关文章

  1. Elasticsearch搜索异常-------org.elasticsearch.common.io.stream.NotSerializableExceptionWrapper: parse_exception

    异常问题: Caused by: org.elasticsearch.index.query.QueryShardException: Failed to parse query [LOL: Uzi和 ...

  2. Java学习随笔4:Java的IO操作

    1. IO流的作用是读写设备上的数据,如硬盘文件.内存.键盘.网络等.根据数据走向,可分为:输入流和输出流:根据处理的数据类型,可分为:字节流和字符流.字节流可以处理所有类型的数据,如MP3.图片.视 ...

  3. apache commons io包基本功能

    1. http://jackyrong.iteye.com/blog/2153812 2. http://www.javacodegeeks.com/2014/10/apache-commons-io ...

  4. Java I/O— 梳理各种“流”

    背景 Java核心库java.io它提供了一个综合IO接口.包含:文件读写.标准装备输出等..Java在IO它是流为基础进行输入输出的.全部数据被串行化写入输出流,或者从输入流读入. -- 百度百科 ...

  5. [转]Commons IO 官方文档

    原文地址:http://ifeve.com/commons-io/ 本文翻译自 Commons IO 官方文档 译者:MagicWolf Common IO 是一个工具库,用来帮助开发IO功能 它包括 ...

  6. apache.commons.io.FileUtils的常用操作

    至于相关jar包可以到官网获取 http://commons.apache.org/downloads/index.html package com.wz.apache.fileUtils; impo ...

  7. apache commons io入门

    原文参考  http://www.javacodegeeks.com/2014/10/apache-commons-io-tutorial.html    Apache Commons IO 包绝对是 ...

  8. .apache.commons.io 源代码学习(二)FilenameUtils类

    FilenameUtils是apache common io中一个独立的工具类,对其他没有依赖,看其源代码的import即可知道. import java.io.File;import java.io ...

  9. Google的Guava之IO升华

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/luo201227/article/details/36413279 程序员在开发过程中,使用文件的几 ...

  10. 少啰嗦!一分钟带你读懂Java的NIO和经典IO的区别

    1.引言 很多初涉网络编程的程序员,在研究Java NIO(即异步IO)和经典IO(也就是常说的阻塞式IO)的API时,很快就会发现一个问题:我什么时候应该使用经典IO,什么时候应该使用NIO? 在本 ...

随机推荐

  1. react 路由

    react 提供了实现路由的方式,不过需要我们下载插件 react-router-dom 当我们下载好了插件,然后我们可以通过 import {} from 'react-router-dom' 来引 ...

  2. 快速查找 js 插件

    我们是否为一个插件找半天找不到而烦恼 BootCDN 现在不用了,我们可以在 https://www.bootcdn.cn/ 中查找我们想要的任何插件,然后点进去,一直到点进去文件,我们便可以得到 这 ...

  3. SpringSecurity——默认过滤器链

    介绍Spring Security默认的过滤器链,介绍顺序按照过滤器在过滤器链中的顺序排序 1.WebAsyncManagerIntegrationFilter 将Security上下文与Spring ...

  4. Jenkins Publish FTP远程部署过程

    步骤: 1.安装FileZilla FTP Server 2.添加FTP账号: 1.Edit——Users——Add 2.Edit——Users——Shared folders 3.下载FileZil ...

  5. 浏览器端-W3School-HTML:HTML DOM rows 集合

    ylbtech-浏览器端-W3School-HTML:HTML DOM rows 集合 1.返回顶部 1. HTML DOM rows 集合 HTML DOM Table 对象 定义和用法 rows ...

  6. 用Python在Android手机上架FTP服务器

    当我们没有带数据线却将手机上的文件共享到电脑上时,架个简单的FTP服务器 可以帮我们快速解决问题.以共享手机里的照片为例: 首先将电脑.手机接入同一个wifi. 然后,手机上用QPython执行以下脚 ...

  7. Helm chart仓库官方仓库不能使用解决方法

    Helm chart仓库官方仓库不能使用解决方法 k8s中的官方helm chart仓库在国内可能使用不了,但是我们又需要使用,这里推荐几个方法. 使用其他的chart仓库 微软的chart仓库 ht ...

  8. Redis集群配置和常见异常解决

    前文 Redis的Cluster集群,是在分布式且开源环境下最佳的高可用解决方案,可以有效的解决服务器宕机下或高并发下,数据的完整性. 文档前提 Redis 3.0版本或更高版本.(3.0版本开始支持 ...

  9. fastjson反序列化LocalDateTime失败的问题java.time.format.DateTimeParseException: Text '2019-05-24 13:52:11' could not be parsed at index 10

    本地java类 import org.springframework.format.annotation.DateTimeFormat; import java.time.LocalDateTime; ...

  10. Go package(2) strings 用法

    go version go1.10.3 Go中的字符串用法,可以在 godoc.org 上查看语法和用法. 最简单的语法就是获取字符串中的子串 s := "hello world" ...