Apache common-io用戶指南
用戶指南
Commons-io 包含utility classes,endian classes,line iterator,file filters,file comparators 以及stream implementations.
如果像要更多詳細描述,請查閱javadocs.
Utility 類庫
IOUtils
IOUtils 包含處理閱讀、寫作和複製的實用方法。這些方法在InputStream, OutputStream, Reader和Writer上可以正常工作。
舉一個例子,考慮一下讀取來自一個url的數據,並且打印它們。使用標準的方法是:
InputStream in =new
URL( "http://jakarta.apache.org").openStream();
try {
InputStreamReader inR = newInputStreamReader(
in );
BufferedReader buf = newBufferedReader(
inR );
String line;
while ( ( line
= buf.readLine()
) != null ) {
System.out.println(line
);
}
} finally {
in.close();
}
如果使用IOUtils類,可以這樣做:
InputStream in =new
URL( "http://jakarta.apache.org").openStream();
try {
System.out.println(IOUtils.toString(
in) );
} finally {
IOUtils.closeQuietly(in);
}
在某些應用領域,他們的IO操作是很普遍的,使用這個類可以節省很多時間。你完全可以依靠行之有效的代碼。
對於上面的實用代碼,靈活性和速度是最重要的。不過你也應該明白這種方法的侷限性。利用上述技術讀1GB的文件會導致試圖創造一個1GB的字符串對象呢!
FileUtils
FileUtils 類提供了一些操作文件對象的實用方法。包含讀取、寫入、複製和比較文件。
比如逐句讀取一整個文件可以使用如下方法:
Filefile
= new File("/commons/io/project.properties");
List lines=
FileUtils.readLines(file,"UTF-8");FilenameUtils
FilenameUtils類裏包含了一些方法,可以直接操作文件名而不用使用文件對象。該類的目的是保持程序在Unix和Windows之間的一致性,以幫助這些環境中(如移動從開發到生產)之間的轉換。
例如標準化一個文件名去除相鄰兩點的片段:
String filename ="C:/commons/io/../lang/project.xml";
String normalized = FilenameUtils.normalize(filename);
// result is "C:/commons/lang/project.xml"
FileSystemUtils
FileSystemUtils包含了一些JDK沒有提供的用於訪問文件系統的實用方法。當前,只有一個用於讀取硬盤空餘空間的方法可用。注意這裏使用命令行,而不是本地代碼。
long freeSpace =FileSystemUtils.freeSpace("C:/");
Endian類庫
不同的計算機體系結構使用不同約定的字節排序。在所謂的“低位優先”體系結構中(如Intel),低位字節處於內存中最低位置,而其後的字節,則處於更高的位置。在“高位優先”的體系結構中(如Motorola),這種情況恰恰相反。
這個類庫上有兩個相關類:
EndianUtils包含用於交換java原對象和流之間的字節序列。
SwappedDataInputStream類是DataInput接口的一個實例。使用它,可以讀取非本地的字節序列。
想了解更多,請參閱http://www.cs.umass.edu/~verts/cs32/endian.html
Line iterator
org.apache.commons.io.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(iterator);
}
File filters
org.apache.commons.io.filefilter包定義了一個合併了java.io.FileFilter以及java.io.FilenameFilter的接口(IOFileFilter)。除此之外,這個包還提供了一系列直接可用的IOFileFilter的實現類,可以通過他們合併其它的文件過濾器。比如,這些文件過濾器可以在列出文件時使用或者在使用文件對話框時使用。
有關詳細信息,請參閱filefilter包的Javadoc。
org.apache.commons.io.comparator包爲java.io.File提供了一些java.util.Comparator接口的實現。例如,可以使用這些比較器對文件集合或數組進行排序。
有關詳細信息,請參閱comparator包的Javadoc。
org.apache.commons.io.input和org.apache.commons.io.output包中包含的針對數據流的各種各樣的的實現。包括:
•空輸出流-默默吸收發送給它的所有數據
•T型輸出流-全用兩個輸出流替換一個進行發送
•字節數組輸出流-這是一個更快版本的JDK類
•計數流-計算通過的字節數
•代理流-使用正確的方法委拖
•可鎖寫入-使用上鎖文件提供同步寫入