1. 程式人生 > >apache commons io 2.2(六)工具部分

apache commons io 2.2(六)工具部分


近段時間,對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)