Apache commons IO

Apache Commons IO

概要

本文全部引用自apache commons io的官网文档。

项目信息

Field Value
项目名称 Apache Commons IO
项目描述 Apache Commons IO 库包含了工具类,流的实现, 文件过滤器,文件比较器,endian转换类,还有其他更多的内容。
项目主页 http://commons.apache.org/proper/commons-io/

项目组织

Field Value
组织名称 The Apache Software Foundation
URL http://www.apache.org/

构建信息

Field Value
GroupId commons-io
ArtifactId commons-io
Version 2.5
Type jar
Java Version 1.6

依赖信息

Apache Maven

<dependency>
  <groupId>commons-io</groupId>
  <artifactId>commons-io</artifactId>
  <version>2.5</version>
</dependency>

Apache Buildr

'commons-io:commons-io:jar:2.5'

Apache Ivy

<dependency org="commons-io" name="commons-io" rev="2.5">
  <artifact name="commons-io" type="jar" />
</dependency>

Groovy Grape

@Grapes(
    @Grab(group='commons-io', module='commons-io', version='2.5')
)

Grails

compile 'commons-io:commons-io:2.5'

Leiningen

[commons-io "2.5"]

SBT

libraryDependencies += "commons-io" % "commons-io" % "2.5"

项目依赖

  • commons-io:commons-io:jar:2.5
    • junit:junit:jar:4.12 (test)
      • org.hamcrest:hamcrest-core:jar:1.3 (test)

持续集成

Access

https://continuum-ci.apache.org/

Notifiers

No notifiers are defined. Please check back at a later date.

Java Docs

http://commons.apache.org/proper/commons-io/javadocs/api-1.4/index.html


指南

工具类

IOUtils

IOUtils 包含了用来处理读、写、复制
的工具方法。这些方法基于 InputStream,OutputStream , Reader , Writer运行。

例:想象一下,一个从URL读取字节并将其打印的任务,典型的实现代码如下:

InputStream in  = new URL("http://commons.apache.org").openStream();

try{
    InputStreamReader inR = new InputStreamReader(in);
    BufferedReader buf = new BufferedReader(inR);
    String line;
    while( ( line = buf.readLine() ) != null ){
        System.out.println( line );
    }
}finally{
    in.close();
}

而通过IOUtils类,实现如下:

InputStream in = new URL( "http://commons.apache.org" ).openStream();
try{
    System.out.println( IOUtils.toString( in ) );
}finally{
    IOUtils.closeQuietly( in );
}

在特定的应用领域里,这样的IO操作很普遍,并且这个类将会节省很大一部分时间。你更可以依赖这些经过良好测试的代码。

对于像这样的工具代码,弹性和速度是头等重要的。但是你应当意识道这种实现的局限性。使用上述的技术读取一个1GB的文件将会创建一个1GB大小的String对象。

FileUtils

FileUtils
包含了与File对象一起工作的工具方法。这些方法包括读、写、复制、比较文件。

比如,一行一行的读取整个文件你可能会这样实现:

File file = new File("/commons/io/project.properties");
List lines = FileUtils.readLines(file,"UTF-8");

FilenameUtils

FilenameUtils
包含了不使用File对象操作文件名的工具类方法。这个类的主旨是使Unix和Windows一致,为了帮助这些环境之间的过渡(比如说开发环境和生产环境)。

比如为了规范化的去除两个点的路径:

String filename = "C:/commons/io/../lang/project.xml";
String normalized = FilenameUtils.normalize(filename);
//结果是  "C:/commons/lang/project.xml"

FileSystemUtils

FileSystemUtils
包含了一系列不被jdk支持的操作文件系统的工具方法。现在,唯一的方法是用来获取磁盘剩余空间。注意这使用的是命令行而不是native代码。

比如:

long freeSpace = FileSystemUtils.freeSpace("C:/");

Endian classes

不同的计算机架构包含了不同的byte ordering的习惯。在被称作“Little Endian”的架构(比如Intel)上,
low-order byte被存储在内存的最低地址,并且随后的字节在高位地址。对于“Big Endian”架构(比如Motorola),情况恰好相反。

这个包中有两个类与之相关:

  • EndianUtils
    类包含了用于交换Java primitives和streams的Endian-ness的静态方法。
  • SwappedDataInputStream
    类是一个DataInput接口的实现,通过这个类,用户可以读取文件数据而不需理会Endian-ness。

更多信息,请查看<http://www.cs.umass.edu/~verts/cs32/endian.html >

Line iterator

org.apache.commons.io.LineIterator 类提供了一种弹性的方式来操作line-based的文件。LineIterator的实例可以通过FileUtils或者IOUtils的钢厂方法直接创建。
推荐的使用方式是:

LineIterator it = FileUtils.lineIterator(file,"UTF-8");
try{
    while( it.hasNext() ){
        String line = it.nextLine();
        //do something with line
    }
}finally{
    LineIterator.closeQuietly(it);
}

File filters

org.apache.commons.io.filefilter定义了一个接口IOFileFilter
合并了java.io.FileFilterjava.io.FilenameFilter。并且这个包提供了一系列随时取用的IOFileFilter的实现。这些实现允许你合并其他类似的过滤器。
比如,这些过滤器可以用来list files或者FileDialog

更多信息,请查看filefilter包的javadoc。

File comparators

org.apache.commons.io.comparatorjava.io.File提供了java.util.Comparator的一些实现。
比如这些比较器可以被用来给文件列表排序。

更多信息,请查看Comparator包的javadoc。

Streams

org.apache.commons.io.inputorg.apache.commons.io.output packages包含了各种有用的流的实现。内容如下:

  • Null output stream - 会静默的接收发送给它的数据
  • Tee output stream - 发送output数据给两个流而不是一个
  • Byte array output stream - 这是一个比JDK类更快的版本
  • Counting streams - 查出经过的字节数
  • Proxy streams - proxy中的正确方法的delegate
  • Lockable writer - 使用锁文件提供同步写操作

更多信息请查看inputoutput的javadoc。

结束

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,839评论 6 482
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,543评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 153,116评论 0 344
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,371评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,384评论 5 374
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,111评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,416评论 3 400
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,053评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,558评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,007评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,117评论 1 334
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,756评论 4 324
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,324评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,315评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,539评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,578评论 2 355
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,877评论 2 345

推荐阅读更多精彩内容