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
包含了與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 - 使用鎖文件提供同步寫操作