您的位置:首页 > 运维架构 > Apache

apache commons io 2.2(六)工具部分

2016-02-12 03:28 597 查看
近段时间,对apache commons io的源码做了深入的了解,在此把一些见解与大家分享。

首先我选择了大部分框架还依赖的2.2版本而不是最新的2.4版本(2.5发行版还没有发布)进行源码的研读,今天就简介一下commons io的工具部分。

复制工具类:

org.apache.commons.io.CopyUtils(由IOUtils.write()或IOUtils.copy()代替)

一个从输出流中将内容复制到输入流的工具类,其在复制的过程中不会关闭或清空输出流。

在复制过程中会开辟一个4k的缓存。

文件系统工具类:

org.apache.commons.io.FileSystemUtils

查询指定设备可用空间工具类。通过执行命令行命令来查询指定设备可用空间,并适配了各种操作系统。

freeSpace方法所得到的返回值是非标准化的,因为它在不同操作系统下返回的值的单位不一样。

使用freeSpaceKb即可,该方法可以返回以kb为单位的结果。

即核心是创建一个ThreadMonitor线程,并在线程中通过Runtime.getRuntime().exec()方法执行exec命令行。执行后在返回结果中查找可用空间大小。

十六进制输出类:

org.apache.commons.io.HexDump

可以将数据转换成16进制输出。

输入输出工具类:

org.apache.commons.io.IOUtils

通用输入输出流的便捷操作工具类,有许多静态的工具方法,主要有关闭流、读取流、写入流、两流间复制、两流内容是否相等。

字节转字符和字符转字节的方法,鼓励使用给定字符集编码的方法进行操作,这样对环境迁移如开发环境到运行环境能获得更好的支持。

该类中的方法都不会对流进行清洗或关闭,这样就不会影响调用处的使用。

文件存在异常:

org.apache.commons.io.FileExistsException

一个提示当前文件已经存在的异常。多用于文件迁移时,出现同名文件时抛出异常。

带原因的输入输出异常:

org.apache.commons.io.IOExceptionWithCause

由于在Java6之前IOException没有记录cause的构造方法,该类继承IOException实现了带cause的构造方法。

可标记流异常:

org.apache.commons.io.TaggedIOException

可添加标记的IO异常。可以通过标记来确认是哪一个输入输出流引起的。

行迭代器:

org.apache.commons.io.LineIterator

一个文件的行迭代器,可以一行一行读取出来。但不能进行删除操作。

守护线程:

org.apache.commons.io.ThreadMonitor

一个守护线程,可传所守护的线程为参数,如果不传则为守护当前线程。注意该类的访问权限为保护。

临时文件删除功能:

org.apache.commons.io.FileCleaner(由FileCleaningTracker代替)

内部用一个待删除文件的队列,当被标记为可回收时该文件将被删除。这个工具类将创建一个后台进程来处理文件删除操作。

它有各种删除策略,这些策略都被封装到FileDeleteStrategy类中。

org.apache.commons.io.FileCleaningTracker

里面有一个叫Reaper的内部类实现了后台进程。整个应用有且仅有一个Reaper进程。

而另一个叫Tracker的内部类通过继承PhantomReference(弱引用类)来维护待删除文件列表。此处使用弱引用是应该是因为设计者不希望该守护进程的引用影响主进程中业务对于这些引用的使用,特别是回收机制。使用了弱引用的话,回收机制基本会忽略这些引用,从而达到不影响主进程引用的目的。

在FileCleaningTracker中只保存文件的path而不保存文件对象。

org.apache.commons.io.FileDeleteStrategy

文件删除策略,它提供了normal和force两种策略。

normal策略就是调用File类的delete进行文件删除。

force策略就是强行删除该文件,且无论它是文件夹还是文件,如果是文件夹则将其内容文件一并删除。

文件名工具类

org.apache.Commons.io.FilenameUtils

文件命名工具类,以构造同时适用于unix与windows的文件路径。

其主要实现了处理逻辑路径返回一个最简路径,即把..后又打开又..等的情况处理掉。

路径连接,即把后一个逻辑路径与前一个逻辑路径的连接起来。

判断两个路径是否是包含关系路径转换,unix与windows互换比较路径是否相同.

根据commons io的官方最佳实践,推荐我们尽量使用java.io.File进行文件名的处理,而不是使用org.apache.commons.io.FilenameUtils类。

org.apache.commons.io.FileUtils

有写文件、读文件、创建文件夹、复制文件/文件夹、删除文件/文件夹、从URL中获取文件、遍历后显示文件集结果、比较文件内容、修改文件最后修改时间、检查文件正确性,这些功能。

大小写敏感类:

org.apache.commons.io.IOCase

这个类专门处理流中的大小写问题。不同的文件系统对大小写敏感具有不同的规则。Windows是大小写不敏感的,Unix是大小写敏感的。IOCase可以自适应大小写敏感问题、基于当前系统的大小写敏感路径比较。

文件名工具类

org.apache.Commons.io.FilenameUtils

文件命名工具类,以构造同时适用于unix与windows的文件路径。

其主要实现了处理逻辑路径返回一个最简路径,即把..后又打开又..等的情况处理掉。

路径连接,即把后一个逻辑路径与前一个逻辑路径的连接起来。

判断两个路径是否是包含关系路径转换,unix与windows互换比较路径是否相同.

根据commons io的官方最佳实践,推荐我们尽量使用java.io.File进行文件名的处理,而不是使用org.apache.commons.io.FilenameUtils类。

org.apache.commons.io.FileUtils

有写文件、读文件、创建文件夹、复制文件/文件夹、删除文件/文件夹、从URL中获取文件、遍历后显示文件集结果、比较文件内容、修改文件最后修改时间、检查文件正确性,这些功能。

大小写敏感类:

org.apache.commons.io.IOCase

这个类专门处理流中的大小写问题。不同的文件系统对大小写敏感具有不同的规则。Windows是大小写不敏感的,Unix是大小写敏感的。IOCase可以自适应大小写敏感问题、基于当前系统的大小写敏感路径比较。

ONE FOR IT是一个呆萌CTO打理的资讯读物,每天只为你准备一篇IT行业新鲜资讯。互联网的前沿,一篇就够了。(ID:OFI)

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: