java common-io api_Apache commons IO学习笔记

Java Docs

工具类

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

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

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

File file = new File("/commons/io/project.properties");

List lines = FileUtils.readLines(file,"UTF-8");

FilenameUtils

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

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

String filename = "C:/commons/io/../lang/project.xml";

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

FileSystemUtils

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

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

Endian classes

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

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

EndianUtils

类包含了用于交换Java primitives和streams的Endian-ness的静态方法。

SwappedDataInputStream

类是一个DataInput接口的实现,通过这个类,用户可以读取文件数据而不需理会Endian-ness。

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.FileFilter和java.io.FilenameFilter。并且这个包提供了一系列随时取用的IOFileFilter的实现。这些实现允许你合并其他类似的过滤器。

比如,这些过滤器可以用来list files或者FileDialog

File comparators

包org.apache.commons.io.comparator为java.io.File提供了java.util.Comparator的一些实现。

比如这些比较器可以被用来给文件列表排序。

Streams

包org.apache.commons.io.input和org.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 - 使用锁文件提供同步写操作

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值