文档章节

提高生产力:文件和IO操作(ApacheCommonsIO-汉化分享)

FansUnion
 FansUnion
发布于 2015/05/03 01:26
字数 1759
阅读 55
收藏 3
       复制、移动、删除、比较、监控、文件读写 等文件和IO操作是编程中比较常用的功能。
       幸运的是,Apache Commons IO等开源组件已经帮我们实现了。
       我们可以不用重复造轮子了。

1.资料地址

1.1官方网站http://commons.apache.org/proper/commons-io/

1.2下载地址http://commons.apache.org/proper/commons-io/download_io.cgi

2.简要介绍(官方英文的翻译版)

2.1版本说明-Release Notes
Commons IO是一个Java工具类库的包,类似于java.io包。
这个包中的类被认为非常标准和高度复用,以至于值得加入到java.io包中。

Commons IO库包含了工具类、流实现、文件过滤器、文件比较器、字节序转换等。

2.2概要-Overview

Commons IO是一个帮助开发IO功能的工具库。
主要包括了以下6个领域:

①工具类-使用静态方法执行通用的任务。
②输入-有用的(字节)输入流(Input Stream)和(字符)读取器(Reader)实现。
③输出-有用的(字节)输出流(Output Stream)和(字符)书写器(Writer)实现。
④过滤器-多种多样的的文件过滤器(java.io.FileFilter,java.io.FilenameFilter)实现。
⑤比较器-多种多样的文件比较器(java.util.Comparator)实现。
⑥文件监听器-一个用来监听文件系统事件的组件。

原文出处:Release Notes来自Release-Notes.txt,Overview来自官方网站。

3.详细介绍

3.1工具类


FileUtils:

通用的文件操作工具。
这个类提供了以下领域的功能:
向文件中写入 ;
从文件中读取 ;
创建目录,包括父路径;
拷贝文件和目录;
删除文件和目录;
文件和URL的相互转换;
通过过滤器和扩展名,列出文件和目录;
比较文件内容;
文件最后修改日期;
计算checksum。

FilenameUtils:通用的文件名和文件路径操作工具类。从基于Windows开发环境的机器,移动文件到
基于Unix的生产环境机器时,你可能会遇到关于文件名的问题。这个类的目标就是帮助你避免这些问题。

FileSystemUtils:通用的文件系统工具类。
这个类提供静态的工具方法,为实现通用的文件系统功能(JDK java.io.File没有提供的) 。
目前提供的功能仅限于:获得驱动器的剩余空间。

IOUtils:通用的IO流操作工具类。
这个类提供了输入/输出操作的静态工具方法。

closeQuietly – 这些方法关闭流,忽略null和异常 ;
toXxx/read – 这些方法从流中读取数据 ;
write – 这些方法向流中写入数据;
copy – 这些方法拷贝数据从一个流到另外一个;
contentEquals – 这些方法比较2个流中的内容。

ThreadMonitor:监听一个线程,当线程超时的时候打断它。

更多介绍,请参考

http://commons.apache.org/proper/commons-io/javadocs/api-release/index.html?org/apache/commons/io/package-summary.html

3.2输入流


BOMInputStream:第1个字节写入BOM字节的流。
BrokenInputStream:损坏的输入流。该流的任何方法都会抛出IOException,主要用来测试“错误处理代码”的正确性。
CountingInputStream:一个字节输入流的包装类,用来统计经过该流的字节数。
CharSequenceInputStream:可以从String, StringBuffer, StringBuilder和CharBuffer读取数据的字节流。
CharSequenceReader:以从String, StringBuffer, StringBuilder和CharBuffer读取数据的字符流。

该流的一个典型的用途是调试,确保读取的数据是期待的。

更多介绍,请参考

http://commons.apache.org/proper/commons-io/javadocs/api-release/index.html?org/apache/commons/io/input/package-summary.html

3.3输出流


BrokenOutputStream:损坏的输出流。该流的任何方法都会抛出IOException,主要用来测试“错误处理代码”的正确性。
CountingOutputStream:一个字节输出流的包装类,用来统计经过该流的字节数。
StringBuilderWriter:Writer的实现类,输出数据到StringBuilder。
这个实现类是StringWriter之外的另一种选择,提供非同步的实现,为了更好的性能。
多线程环境的安全用途,应该使用StringWriter。
WriterOutputStream:OutputStream实现类,使用指定的编码,传送字节数据到字符流,写入结果流到Writer。

更多介绍,请参考

http://commons.apache.org/proper/commons-io/javadocs/api-release/index.html?org/apache/commons/io/output/package-summary.html

3.4过滤器


特别说明:"过滤/Filter"这个词存在歧义,本处的意思是"保留符合条件的文件",而不是"排除符合条件的文件"。


AgeFileFilter:基于cutoff时间的文件过滤器,能够过滤任何时间更新/更老/相等的文件。
EmptyFileFilter:过滤空的文件和目录。
SizeFileFilter:基于大小的过滤器,能够过滤小于/等于/大于指定大小的文件。
NameFileFilter:过滤文件名满足一定条件的文件。

CanReadFileFilter:这个过滤器接受“可读”的文件。
CanWriteFileFilter:这个过滤器接受“可写”的文件。

DirectoryFileFilter:这个过滤器接受“目录”文件。
FileFileFilter:这个过滤器接受“文件,非目录”文件。
HiddenFileFilter:这个过滤器接受“隐藏”文件。

AndFileFilter:提供条件"且"逻辑,如果每一个filter否返回true,则返回true。
类似的还有:OrFileFilter/NotFileFilter。

RegexFileFilter:基于正则表达式的过滤器。
WildcardFileFilter:基于通配符的过滤器。

PrefixFileFilter:过滤文件名"前缀"满足一定条件的文件。
SuffixFileFilter:过滤文件名"后缀"满足一定条件的文件。

更多介绍,请参考

http://commons.apache.org/proper/commons-io/javadocs/api-release/index.html?org/apache/commons/io/filefilter/package-summary.html

3.5比较器


DefaultFileComparator: 使用默认的File#compareTo(File)方法比较。
CompositeFileComparator:使用一系列委托比较器比较。
DirectoryFileComparator:使用File#isDirectory()方法比较。
ExtensionFileComparator:根据文件的"扩展名"比较。
LastModifiedFileComparator: 根据最后修改日期/时间比较。
NameFileComparator:根据文件名比较。
PathFileComparator:根据文件路径比较File#getPath()。
ReverseComparator:逆序比较器,把比较结果"倒过来"。
SizeFileComparator:根据文件的长度和大小比较 File#length()和FileUtils#sizeOfDirectory(File)。
更多介绍,请参考
http://commons.apache.org/proper/commons-io/javadocs/api-release/index.html?org/apache/commons/io/comparator/package-summary.html


3.6文件监听器


FileAlterationListener:接收文件系统变化事件的监听器。
FileAlterationMonitor:文件变化监控器。
产生一个监控线程,以一定的时间间隔,触发注册的FileAlterationObserver。

FileAlterationObserver:文件变化观察者,代表某一根目录下的文件状态,检查文件系统,通知listener创建、改变和删除事件。

更多介绍,请参考

http://commons.apache.org/proper/commons-io/javadocs/api-release/index.html?org/apache/commons/io/monitor/package-summary.html


4.一个经典的例子-SpringMVC上传文件

@RequestMapping(value = "uploadLoginSplash", method = RequestMethod.POST)
public String uploadLoginSplash(HttpServletRequest request, @RequestParam("file") MultipartFile file)
throws IOException {

if (!file.isEmpty()) {
   String realPath = request.getSession().getServletContext().getRealPath(SPLASH);

   //这里不必处理IO流关闭的问题,因为FileUtils.copyInputStreamToFile()方法内部会自动把用到的IO流关掉
   FileUtils.copyInputStreamToFile(file.getInputStream(), new File(realPath, SPLASH_JPG));

   #org.apache.commons.io.FileUtils
    }

   return "manager/setting/settingManager";


}

5.总结
   ApacheCommonsIO等Apache Commons公共组件,可以大大提高咱们的开发效率,减少软件Bug和提高软件质量, 非常值得在项目中使用。


参考资料:commons-io-2.2-javadoc.jar和commons-io-2.2-sources.jar

原文参见 提高生产力:文件和IO操作(ApacheCommonsIO-汉化分享)

 

© 著作权归作者所有

FansUnion
粉丝 60
博文 858
码字总数 825464
作品 0
丰台
高级程序员
私信 提问
使用Chinese​Localization插件轻松汉化Sublime

使用ChineseLocalization插件轻松汉化Sublime经验分享: 之前安装Sublime的汉化包时,需要手动下载zip格式的汉化包,然后解压到Sublime的Package安装目录,比较麻烦。今天在Sublime的插件中心...

yaotingxi
2015/12/29
1K
0
ToolBOX 标准件汉化文件下载

使用 SolidWorks 3D 设计 CAD 常用零件和零部件模型库 Toolbox 简化设计,帮助加快设计过程,节省时间和开发成本,并提高生产效率。 但是在实际使用中因为其名称等显示的原因让工程师头痛不已...

九纬科技
2017/07/20
0
0
MXNet 0.8.0 发布,轻量级深度学习框架

MXNet 0.8.0 发布了,这是 NNVM 重构前的最后一个版本。MXNet是一款设计为效率和灵活性的深度学习框架。它允许你混合符号编程和命令式编程,从而最大限度提高效率和生产力。在其核心是一个动...

王练
2016/12/31
1K
1
Swagger实例分享(VS+WebApi+Swashbuckle)

Swagger实例分享(VS+WebApi+Swashbuckle)   Swagger可以很方便的为发布的WebApi自动生成优雅的文档,不需额外自己编写,只需为项目配置好,是一个很好用的工具,做一个简单的Demo和大家分享...

我家的小萌珊
07/18
0
0
iDempiere中文社区聚会准备

iD的开发者workshop还是蛮丰盛的,可以讨论路线图,功能,架构,安全等。 中文社区是爱好者,IT公司(,用户?)的组织,我们中文社区可以讨论什么议题? 社区建设:汉化、推广、生态化(解决...

不小不
2016/04/24
2
1

没有更多内容

加载失败,请刷新页面

加载更多

nginx学习笔记

中间件位于客户机/ 服务器的操作系统之上,管理计算机资源和网络通讯。 是连接两个独立应用程序或独立系统的软件。 web请求通过中间件可以直接调用操作系统,也可以经过中间件把请求分发到多...

码农实战
今天
5
0
Spring Security 实战干货:玩转自定义登录

1. 前言 前面的关于 Spring Security 相关的文章只是一个预热。为了接下来更好的实战,如果你错过了请从 Spring Security 实战系列 开始。安全访问的第一步就是认证(Authentication),认证...

码农小胖哥
今天
11
0
JAVA 实现雪花算法生成唯一订单号工具类

import lombok.SneakyThrows;import lombok.extern.slf4j.Slf4j;import java.util.Calendar;/** * Default distributed primary key generator. * * <p> * Use snowflake......

huangkejie
昨天
12
0
PhotoShop 色调:RGB/CMYK 颜色模式

一·、 RGB : 三原色:红绿蓝 1.通道:通道中的红绿蓝通道分别对应的是红绿蓝三种原色(RGB)的显示范围 1.差值模式能模拟三种原色叠加之后的效果 2.添加-颜色曲线:调整图像RGB颜色----R色增强...

东方墨天
昨天
11
1
将博客搬至CSDN

将博客搬至CSDN

算法与编程之美
昨天
13
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部