Commons之Commons-io
1 概述
Commons IO是针对开发IO流功能的工具类库。
主要包括六个区域:
工具类——使用静态方法执行共同任务
输入——用于InputStream和Reader实现
输出——用于OutputStream和Writer实现
过滤器——各种文件过滤器实现
比较器——各种文件的java.util.Comparator实现
文件监听器——监听文件系统事件的组件
2 用户指南
Commons IO包含工具类、endian classes, line iterator, file filters, file comparators and stream implementations.
更多详细描述见javadocs。
2.1 工具类
2.1.1 IOUtils
IOUtils包含处理读、写和复制的工具方法。方法对InputStream、OutputStream、Reader和Writer起作用。
例如,从一个URL读取字节的任务,并且打印它们:
InputStream in = new URL( "http://commons.apache.org" ).openStream(); |
使用IOUtils:
|
在某些应用领域,这些IO操作是常见的,而这个类可以节省大量的时间。你可以依靠经过良好测试的代码。
这样的实用程序代码,灵活性和速度是最重要的。但是你也应该理解这种方法的局限性。使用上述技术读取一个1 gb文件将导致试图创建一个1 gb的字符串对象!
2.1.2 FileUtils
FileUtils类包含使用File对象的工具方法。包括读写、复制和比较稳健。
读取整个文件行:
|
2.1.3 FilenameUtils
FilenameUtils类包含工具方法不需要使用File对象就可以操作文件名。该类致力于屏蔽Unix和Windows之间的不同,避免这些环境之间的转换(例如,从开发到生产)。
例如,规范文件删除双点片段:
|
2.1.4 FileSystemUtils
FileSystemUtils类包含使用JDK不支持的文件系统访问功能的工具方法。当前,只有获取驱动的空间大小的方法。注意,这是使用的命令行,而不是本地代码。
|
2.2 Endian类
不同的计算机体系采用不同的字节排序约定。在所谓的“Little Endian”的体系结构中(例如Intel),低位字节存储在内存中较低地址,后续字节在较高地址。对于“Big EndIan”体系结构,(例如Motorola),情况恰好相反。
在关联包中有两个类:
EndianUtils类包含交换Java原始和流的Endian-ness的静态方法。
SwappedDataInputStream类是DataInput接口的实现。使用它,我们能从非本地EndIan-ness的文件读取数据。
更多细节见http://www.cs.umass.edu/~verts/cs32/endian.html。
2.3 行迭代器
org.apache.commons.io.LineIterator类提供灵活的方式使用一个基于行的文件。可以直接,或通过FileUtils或IOUtils的工厂方法创建实例。推荐使用模式:
|
2.4 文件过滤器
org.apache.commons.io.filefilter包定义一个接口(IOFileFilter)包含java.io.FileFilter和java.io.FilenameFilter。此外,包提供一系列随时可用的IOFileFilter接口实现,包括允许你组合其它过滤器的实现。这些过滤器能用于列出文件。
2.5 文件比较器
org.apache.commons.io.comparator包提供一系列java.io.File的java.util.Comparator实现。这些比较器能用于排序文件列表和数组。
2.6 流
org.apache.commons.io.input和org.apache.commons.io.output包含各种有用的流实现。
空输出流——默默的吸收发给它的所有数据。
Tee输出流——发送输出数据到两个流。
字节输出输出流——更便捷的JDK类版本。
计算流——统计传递的字节数。
代理流——委托恰当的方法代理。
可锁定的Writer——使用文件锁提供同步的Writer。
3 最佳实践
该文档在IO领域出现一系列“最佳实践”。
3.1 java.io.File
通常,你必须使用文件和文件名。有很多事情可能出错:
一个类可以在Unix上工作但不能在Windows上工作(反之亦然)
由于双重或丢失路径分隔符的无效路径
UNC文件名(在Windows上)不使用我的本地文件名功能函数
等等
这些都是很好的理由不使用文件名作为字符串。使用java.io.File而不是处理上面的很多中情况。因此,我们最好的实践推荐使用java.io.File而不是文件名字符串避免平台依赖。
Commons-io 1.1包括一个专注于文件名处理的类——FilenameUtils。这处理许多这些文件名问题,然而,任然推荐,尽可能,使用java.io.File对象。
|
足够简单?对的,但如果传入一个完整路径而不是一个文件名会发生什么?请看下面,完全合法的路径:“C:\Temp\documentation.new\README”。定义在上面的方法返回“new\README”,肯定不是你想要的。
请使用java.io.File而不是字符串。在FileUtils你将看到围绕java.io.File的功能函数。
不推荐:
|
推荐:
|
3.2 缓冲流
IO性能依赖于缓冲策略。通常,读取大小为512或1024字节的数据包速度很快,因为这些大小匹配使用在硬盘上的文件系统或文件系统缓冲中的数据包大小。但只要你多次只读取几个字节,性能肯定下降。
当你读取或输出流尤其是处理文件时确保你正确的缓冲流。只是使用BufferedInputStream装饰你的FileInputStream。
|
注意,不要缓冲已经缓冲的流。一些组件像XML解析器可以做自己的缓冲,因此不需要装饰InputStream传入XML解析器,但减慢你的代码。如果你使用CopyUtils或IOUtils不需要使用额外的缓冲流
转自:http://my.oschina.net/u/2000201/blog/480071
Commons之Commons-io相关推荐
- 编写更少量的代码:使用apache commons工具类库
Commons-configuration Commons-FileUploadCommons DbUtilsCommons BeanUtils Commons CLI Commons CodecCo ...
- beanutils工具类_Apache Commons 工具类介绍及简单使用
来源:http://h5ip.cn/9xu3 Apache Commons 工具类大家都有用过,但是可能缺乏系统学习,只用到了一小部分功能,无法发挥极限的价值,肥朝用大白话说就是,一颗好白菜都让猪给拱 ...
- java-常用开源库-apache commons
[查看相关解释]https://www.cnblogs.com/mthoutai/p/6898143.html https://blog.csdn.net/qq_28334041/article/de ...
- Apache工具库——Apache Commons的使用
Apache Commons是Apache开源的一个java组件库,其中包含了大量子项目,其中常用的组件有: 组件 功能介绍 BeanUtils 提供了对于JavaBean进行各种操作,克隆对象,属性 ...
- Apache Commons 工具类介绍及简单使用(转)
转自:http://www.cnblogs.com/younggun/p/3247261.html Apache Commons包含了很多开源的工具,用于解决平时编程经常会遇到的问题,减少重复劳动.下 ...
- Commons 组件学习笔记
目录 目录 Commons 组件在apache官网有详细的资料深入学习的可以在官网查询API及相关资料 Commons 介绍 Commons Lang 组件简介 数组元素的增加 AarryUtils类 ...
- 一篇关于apache commons类库的详解
1.1. 开篇 在Java的世界,有很多(成千上万)开源的框架,有成功的,也有不那么成功的,有声名显赫的,也有默默无闻的.在我看来,成功而默默无闻的那些框架值得我们格外的尊敬和关注,Jakarta C ...
- 初识 Apache Commons jar 包
长篇预警 ,要有耐心才能看下去 1.1. 开篇 在Java的世界,有很多(成千上万)开源的框架,有成功的,也有不那么成功的,有声名显赫的,也有默默无闻的.在我看来,成功而默默无闻的那些框架值得我们格外 ...
- Apache Commons 工具类介绍及简单使用
Apache Commons包含了很多开源的工具,用于解决平时编程经常会遇到的问题,减少重复劳动.下面是我这几年做开发过程中自己用过的工具类做简单介绍. 组件 功能介绍 BeanUtils 提供了对于 ...
- 本週主題 -- Jakarta Commons Lang
SECTION 01 java.lang.* vs commons-lang.* 目前版本為 2.0 , 可以由此處下載 首先, 讓我們先思考一下, jakarta 為何會有一個 commons-la ...
最新文章
- cve-2019-1821 思科 Cisco Prime 企业局域网管理器 远程代码执行 漏洞分析
- 池化层对神经网络的运算速度有什么影响
- LeetCode题库第1题 两数之和
- Elasticsearch与Solr比较
- 安全运维 - Linux系统攻击应急响应
- The (Near) Future of Database | TiDB DevCon 2019
- Win10 Delete键失效怎么办 ?
- C51- NRF24L01 无线串口模块
- VS2010 中修改项目名称
- 一加11:新的赛场,“不温和”的答卷
- 亚马逊中国站获取商品列表
- 伟景行citymaker-----01.javascript打开本地模型CEP,加载目录树,加载要素类
- 一文带你了解学习python的用处及好处,建议收藏
- 面向对象程序设计(c++)面试常问——for考研复试面试
- 重做日志文件(redo log file)
- 骇客白访谈——不要做理想主义者,要做一个实干家——《调试者说》播客——许友昌
- R232芯片IC检验
- Stata+Atom: 强强联手打造编辑利器
- [18调剂]中国农业大学信电学院2018年硕士研究生招生复试时间及接收调剂生的通知...
- 计算机崩溃用英语怎么说,“崩溃”英语怎么说
热门文章
- 深入理解电源纹波与噪声并正确测量简述
- 二维搜索求函数极值的python程序
- 利用python画曲线_利用python画出AUC曲线的实例
- 生产过程精确控制系统
- mips汇编计算开方_全国计算机一级考试模拟题(11)
- MT6739芯片资料大全下载(datasheet,原理图,参考设计,规格书)
- C++:团体程序设计天梯赛(正整数A+B)
- 缺陷调研报告_设备缺陷或故障报告调查分析记录表
- 朵拉云提供最简单的免费虚拟化方案:Hyper-V Server + Windows Admin Center
- 项目上线 - 流程篇