梳理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 < 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工具包的更多相关文章
- Elasticsearch搜索异常-------org.elasticsearch.common.io.stream.NotSerializableExceptionWrapper: parse_exception
异常问题: Caused by: org.elasticsearch.index.query.QueryShardException: Failed to parse query [LOL: Uzi和 ...
- Java学习随笔4:Java的IO操作
1. IO流的作用是读写设备上的数据,如硬盘文件.内存.键盘.网络等.根据数据走向,可分为:输入流和输出流:根据处理的数据类型,可分为:字节流和字符流.字节流可以处理所有类型的数据,如MP3.图片.视 ...
- apache commons io包基本功能
1. http://jackyrong.iteye.com/blog/2153812 2. http://www.javacodegeeks.com/2014/10/apache-commons-io ...
- Java I/O— 梳理各种“流”
背景 Java核心库java.io它提供了一个综合IO接口.包含:文件读写.标准装备输出等..Java在IO它是流为基础进行输入输出的.全部数据被串行化写入输出流,或者从输入流读入. -- 百度百科 ...
- [转]Commons IO 官方文档
原文地址:http://ifeve.com/commons-io/ 本文翻译自 Commons IO 官方文档 译者:MagicWolf Common IO 是一个工具库,用来帮助开发IO功能 它包括 ...
- apache.commons.io.FileUtils的常用操作
至于相关jar包可以到官网获取 http://commons.apache.org/downloads/index.html package com.wz.apache.fileUtils; impo ...
- apache commons io入门
原文参考 http://www.javacodegeeks.com/2014/10/apache-commons-io-tutorial.html Apache Commons IO 包绝对是 ...
- .apache.commons.io 源代码学习(二)FilenameUtils类
FilenameUtils是apache common io中一个独立的工具类,对其他没有依赖,看其源代码的import即可知道. import java.io.File;import java.io ...
- Google的Guava之IO升华
版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/luo201227/article/details/36413279 程序员在开发过程中,使用文件的几 ...
- 少啰嗦!一分钟带你读懂Java的NIO和经典IO的区别
1.引言 很多初涉网络编程的程序员,在研究Java NIO(即异步IO)和经典IO(也就是常说的阻塞式IO)的API时,很快就会发现一个问题:我什么时候应该使用经典IO,什么时候应该使用NIO? 在本 ...
随机推荐
- CentOS7 开机启动脚本与命令后台运行
一.& 在 Linux 命令后加上 & 可以在后台运行 二.nohup 对 SIGHUP 信号免疫,对 SIGINT 信号不免疫,可用 shopt | grep hup 查看. 当关 ...
- oracle中删除某个用户下的所有表
一般的方法:先使用sql查询: SELECT 'DELETE FROM '|| table_name || ';' FROM USER_TABLES ORDER BY TABLE_NAME; 将查询结 ...
- SAX解析示例代码和原理
import java.io.File; import javax.xml.parsers.SAXParser; import javax.xml.parsers.SAXParserFactory; ...
- linux/windows/Mac平台生成随机数的不同方法
linux平台,使用rand.Seed() //rand_linux.go package main import ( "math/rand" "time" ) ...
- IDEA Cannot access alimaven (http://maven.aliyun.com/nexus/content/groups/public/)
[ERROR] Plugin org.apache.maven.plugins:maven-compiler-plugin:3.1 or one of its dependencies could n ...
- Codeforces--C2. Good Numbers (hard version)
题目链接http://codeforces.com/contest/1249/problem/C2.这是道进制转换题,我们的目的是找到最小的一个每个位都是1的三进制数来表示一个十进制数n.做法是,先将 ...
- java:redis(redis安装配置,redis的伪集群配置)
1.redis安装配置: .安装gcc : yum install gcc-c++ .使用FTP工具FileZilla上传redis安装包到linux根目录下(当前步骤可以替换为:在root目录下执行 ...
- Mac上解决Chrome浏览器跨域问题
最近做前端开发总是遇到一个很奇怪的现象,同一个AJAX请求,在Chrome里调试的时候就会提示跨域,但是在手机模拟器或者真机上调试的时候就不会,于是百度了一下,发现是Chrome的安全策略导致的,需要 ...
- Linux-T
vim编辑器i输入Esc切换:wqw保存q退出保存 查看openssl版本号openssl version 查看所有php扩展php -m 查看指定端口占用netstat -anp |grep xxx ...
- PJzhang:shell基础入门的2个疗程-two
猫宁!!! 第6节:重定向 标准输入,标准输出,错误输出 输入重定向符号'<' 输出重定向符号'>'(清空之后再输入),'>>'(当前内容不变,在最后一行追加),'2>' ...