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)
- junit:junit:jar:4.12 (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。
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
更多信息,請查看filefilter包的javadoc。
File comparators
包org.apache.commons.io.comparator
為java.io.File
提供了java.util.Comparator
的一些實現。
比如這些比較器可以被用來給文件列表排序。
更多信息,請查看Comparator包的javadoc。
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
- 使用鎖文件提供同步寫操作
結束