复制、移动、删除、比较、监控、文件读写 等文件和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-汉化分享)

提高生产力:文件和IO操作(ApacheCommonsIO-汉化分享)的更多相关文章

  1. Atitit.跨语言  文件夹与文件的io操作集合  草案

    Atitit.跨语言  文件夹与文件的io操作集合  草案 1. Jdk原生的太难用了..1 2. PS: apache commons-io包,FileUtils有相关的方法,IOUtils一般是拷 ...

  2. FCKEditor文件上传提示信息的汉化

    FCKEditor文件上传提示信息的汉化在FCKeditor中,虽然可以自动监测客户端语言,但是仍有小部分信息未能得到汉化.例如上传图片.Flash时,上传成功和上传失败的对话框提示信息均为英文,只要 ...

  3. Unlocker(强力删除文件工具) 1.9.2 汉化绿色版

    软件名称: Unlocker(强力删除文件工具) 1.9.2 汉化绿色版软件语言: 简体中文授权方式: 免费软件运行环境: Win7 / Vista / Win2003 / WinXP 软件大小: 5 ...

  4. 安卓工作室 android studio文件和代码模板,以及汉化出错问题

    安卓工作室 android studio文件和代码模板,以及汉化出错问题 作者:韩梦飞沙 Author:han_meng_fei_sha 邮箱:313134555@qq.com E-mail: 313 ...

  5. Linux文件的IO操作 一

    系统调用 系统调用: 操作系统提供给用户程序调用的一组“特殊”接口,用户程序可以通过这组“特殊”接口来获得操作系统内核提供的服务 为什么用户程序不能直接访问系统内核提供的服务 为了更好地保护内核空间, ...

  6. 人生苦短之Python文件的IO操作

    在Python中也有涉及到文件的相关操作,从最简单的文件读取说起 文件读取 file = open('/Users/macbookpro/Desktop/使用教程.txt', 'r', encodin ...

  7. 三步操作gitHub汉化插件安装--谷歌浏览器

    如果本文对你有用,请爱心点个赞,提高排名,帮助更多的人.谢谢大家!❤ 如果解决不了,可以在文末进群交流. 一个好用基于chrome的插件,用来汉化gitHub,大致效果图如下: 步骤一: 首先下载谷歌 ...

  8. 文件读写io操作范例

    系统io读写,copy int main(int argc, char **argv) {  if(argc != 3) {   printf("Usage: %s <src> ...

  9. Objective-C:用命令行参数的格式对文件进行IO操作

    // main.m // 03-copyFile // Created by ma c on 15/8/24. // Copyright (c) 2015年. All rights reserved. ...

随机推荐

  1. 前端页面a标签嵌套a标签效果的两种解决方案

    这是由工作中的一个小改动需求得到的这个解决方案的:那个需求是这样的,如图: 需求原来是球队名字没有点击功能的,而蓝色方框两队之间的比赛点击的时候会跳转到比赛文字直播页面.现在需要要求点击球队名字要跳转 ...

  2. 实例介绍Cocos2d-x中Box2D物理引擎:碰撞检測

    在Box2D中碰撞事件通过实现b2ContactListener类函数实现,b2ContactListener是Box2D提供的抽象类,它的抽象函数:virtual void BeginContact ...

  3. WPF学习笔记——设置ListBox选中项的背景颜色

    ListBox的选中项,在我这个WIN7里面,是亮蓝色,颜色是如此之浓厚,差不多遮盖了前景的字体! 太不协调了.可是怎么设置呢?设置触发器,又是IsMouseOver,又是IsFocused,在谷歌里 ...

  4. C# 正则表达式 和 JAVA表达式是想通的

    正则表达式语法 也许有人会说,现在需要正则表达式去验证什么的话,直接在网上找不久一大片吗?还需要学什么啊! 是的,现在在网上找确实是一找一大片,但是,有时候我们也遇到这样的情况,就是我们在网上找的复制 ...

  5. servlet中的中文乱码问题

    老师总会说道:学完这个知识点,我们来谈谈中文乱码问题. 乱码的问题总是无处不在,处理不好会给用户带极差的用户体验. 那么我们来记录一下servlet中的乱码问题吧! 1.服务器向客户端响应时出现的乱码 ...

  6. JAVA8与lambda表达式

    一.lambda表达式的来源 Lambda 表达式(拉姆达表达式)来源于lambda演算是Alonzo Church给出的一套图灵机等价的形式计算系统.lambda演算系统以函数和变量为基础,也可以进 ...

  7. 3.朴素贝叶斯和KNN算法的推导和python实现

    前面一个博客我们用Scikit-Learn实现了中文文本分类的全过程,这篇博客,着重分析项目最核心的部分分类算法:朴素贝叶斯算法以及KNN算法的基本原理和简单python实现. 3.1 贝叶斯公式的推 ...

  8. Jquery中绑定事件的异同

    谈论jquery中bind(),live(),delegate(),on()绑定事件方式 1. Bind() $(selector).bind(event,data,function) Event:必 ...

  9. Struts/Hibernate/Spring源码下载

    Struts: https://olex.openlogic.com/packages/struts Hibernate: https://olex.openlogic.com/packages/hi ...

  10. ★Java语法(二)——————————数据类型常见问题

    1.用float型定义变量:float a = 3.14 :是否正确? 不正确.“=” 两边的精度类型不匹配,应为:float a =(float)3.14 或  float a =3.14F 或   ...