提高生产力:文件和IO操作(ApacheCommonsIO-汉化分享)
复制、移动、删除、比较、监控、文件读写 等文件和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:监听一个线程,当线程超时的时候打断它。
更多介绍,请参考
3.2输入流
BOMInputStream:第1个字节写入BOM字节的流。
BrokenInputStream:损坏的输入流。该流的任何方法都会抛出IOException,主要用来测试“错误处理代码”的正确性。
CountingInputStream:一个字节输入流的包装类,用来统计经过该流的字节数。
CharSequenceInputStream:可以从String, StringBuffer, StringBuilder和CharBuffer读取数据的字节流。
CharSequenceReader:以从String, StringBuffer, StringBuilder和CharBuffer读取数据的字符流。
该流的一个典型的用途是调试,确保读取的数据是期待的。
更多介绍,请参考
3.3输出流
BrokenOutputStream:损坏的输出流。该流的任何方法都会抛出IOException,主要用来测试“错误处理代码”的正确性。
CountingOutputStream:一个字节输出流的包装类,用来统计经过该流的字节数。
StringBuilderWriter:Writer的实现类,输出数据到StringBuilder。
这个实现类是StringWriter之外的另一种选择,提供非同步的实现,为了更好的性能。
多线程环境的安全用途,应该使用StringWriter。
WriterOutputStream:OutputStream实现类,使用指定的编码,传送字节数据到字符流,写入结果流到Writer。
更多介绍,请参考
3.4过滤器
特别说明:"过滤/Filter"这个词存在歧义,本处的意思是"保留符合条件的文件",而不是"排除符合条件的文件"。
AgeFileFilter:基于cutoff时间的文件过滤器,能够过滤任何时间更新/更老/相等的文件。
EmptyFileFilter:过滤空的文件和目录。
SizeFileFilter:基于大小的过滤器,能够过滤小于/等于/大于指定大小的文件。
NameFileFilter:过滤文件名满足一定条件的文件。
CanReadFileFilter:这个过滤器接受“可读”的文件。
CanWriteFileFilter:这个过滤器接受“可写”的文件。
DirectoryFileFilter:这个过滤器接受“目录”文件。
FileFileFilter:这个过滤器接受“文件,非目录”文件。
HiddenFileFilter:这个过滤器接受“隐藏”文件。
AndFileFilter:提供条件"且"逻辑,如果每一个filter否返回true,则返回true。
类似的还有:OrFileFilter/NotFileFilter。
RegexFileFilter:基于正则表达式的过滤器。
WildcardFileFilter:基于通配符的过滤器。
PrefixFileFilter:过滤文件名"前缀"满足一定条件的文件。
SuffixFileFilter:过滤文件名"后缀"满足一定条件的文件。
更多介绍,请参考
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创建、改变和删除事件。
更多介绍,请参考
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-汉化分享)的更多相关文章
- Atitit.跨语言 文件夹与文件的io操作集合 草案
Atitit.跨语言 文件夹与文件的io操作集合 草案 1. Jdk原生的太难用了..1 2. PS: apache commons-io包,FileUtils有相关的方法,IOUtils一般是拷 ...
- FCKEditor文件上传提示信息的汉化
FCKEditor文件上传提示信息的汉化在FCKeditor中,虽然可以自动监测客户端语言,但是仍有小部分信息未能得到汉化.例如上传图片.Flash时,上传成功和上传失败的对话框提示信息均为英文,只要 ...
- Unlocker(强力删除文件工具) 1.9.2 汉化绿色版
软件名称: Unlocker(强力删除文件工具) 1.9.2 汉化绿色版软件语言: 简体中文授权方式: 免费软件运行环境: Win7 / Vista / Win2003 / WinXP 软件大小: 5 ...
- 安卓工作室 android studio文件和代码模板,以及汉化出错问题
安卓工作室 android studio文件和代码模板,以及汉化出错问题 作者:韩梦飞沙 Author:han_meng_fei_sha 邮箱:313134555@qq.com E-mail: 313 ...
- Linux文件的IO操作 一
系统调用 系统调用: 操作系统提供给用户程序调用的一组“特殊”接口,用户程序可以通过这组“特殊”接口来获得操作系统内核提供的服务 为什么用户程序不能直接访问系统内核提供的服务 为了更好地保护内核空间, ...
- 人生苦短之Python文件的IO操作
在Python中也有涉及到文件的相关操作,从最简单的文件读取说起 文件读取 file = open('/Users/macbookpro/Desktop/使用教程.txt', 'r', encodin ...
- 三步操作gitHub汉化插件安装--谷歌浏览器
如果本文对你有用,请爱心点个赞,提高排名,帮助更多的人.谢谢大家!❤ 如果解决不了,可以在文末进群交流. 一个好用基于chrome的插件,用来汉化gitHub,大致效果图如下: 步骤一: 首先下载谷歌 ...
- 文件读写io操作范例
系统io读写,copy int main(int argc, char **argv) { if(argc != 3) { printf("Usage: %s <src> ...
- Objective-C:用命令行参数的格式对文件进行IO操作
// main.m // 03-copyFile // Created by ma c on 15/8/24. // Copyright (c) 2015年. All rights reserved. ...
随机推荐
- extjs_07_combobox&tree&chart
1.combobox <%@ page language="java" import="java.util.*" pageEncoding="U ...
- sublime text3编译C/C++系统提示丢失zlib1.dll解决的方法
用g++ 编译C/C++程序时 出现例如以下系统提示: 解决的方法例如以下: 1.下载zlib1.dll: http://www.pc6.com/softview/SoftView_81060.htm ...
- Java 错误:找不到或无法加载主类(源文件中含有包名 package)
1. 问题定位 编译(javac)和执行(java)java 程序时,出现这种类型的错误:找不到或无法加载主类: 首先排除是否是环境变量配置不当造成的问题,只要保证,命令行界面能够识别 javac/j ...
- Docker For MYSQL 8.0 特别注意修复数据库新的验证方式
从Docker登录MySQL的终端 docker exec -it wordpress-mysql /bin/bash 登录数据库 mysql -u root -p 使用MYSQL数据库 use my ...
- HDU 4474 Yet Another Multiple Problem BFS
题意:求m的倍数中不包含一些数码的最小倍数数码是多少.比如15 ,不包含0 1 3,答案是45. BFS过程:用b[]记录可用的数码.设一棵树,树根为-1.树根的孩子是所有可用的数码,孩子的孩子也是 ...
- ACM_来自不给标题的菜鸟出题组(巴什博弈+素数判定)
来自不给标题的菜鸟出题组 Time Limit: 2000/1000ms (Java/Others) Problem Description: 大B和小b合作出一道程序设计月赛的题,他们的想法是给定一 ...
- css中标签,类名,id名的命名 语义化命名
作为前端开发人,经常头疼于雷鸣,标签,id名的命名,不知道应该基于什么原则. 原则: 2 当命名的时候,问自己,这个元素是要来做什么?(根据使用目的).ad-banner 4 避免依靠位置和视觉效果命 ...
- spring注解、aop(二)
使用注解配置spring 1.导入 spring-aop-5.0.6.RELEASE.jar包 2.为主配置文件引入新的命名空间 xmlns:context="http://www.spri ...
- Leetcode0002--Add Two Numbers 链表求和
[转载请注明]http://www.cnblogs.com/igoslly/p/8672467.html 来看一下题目: You are given two non-empty linked list ...
- js---通过代码学习
1:本例演示 getElementsByTagName 方法. 2:本例演示 getElementsByTagName 方法 3:注意: