1. 程式人生 > 其它 >Java檔案讀寫奇技

Java檔案讀寫奇技

0x00

Java檔案讀寫由於其歷史版本相容原因而略顯複雜,筆者遇到專案中複雜檔案操作需求,繼而不得不從書架上找出10年前的Java核心技術Version 8卷II部分,從Java聖經中找出其檔案操作的基本API,下文將由淺入深逐步討論,需事先說明:本文只談用法,不過多討論原理。

0x01 輸入流

java的IO操作涉及兩大介面:InputStream和OutputStream,二者擁有龐大的實現類群,不同的I/O Stream實現類通過建構函式巢狀的裝飾器模式實現面向不同用途的六操作,例如

var stream = new PushbackInputStream(new BufferedInputStream(new FileInputStream("/home/adm/abc.txt")));

上述程式碼從最內部FileInputStream開始,它表示一個檔案寫入流物件,中間層BufferedInputStream表示用一個帶緩衝的輸入流,即資料不立即寫入磁碟,而是通過緩衝區寫入,且在呼叫close時先將緩衝寫入磁碟再關閉流,最外層PushbackInputStream表示要最終建立的時一個可以預覽一個位元組或者具有指定尺寸的回推緩衝區的流。
不同層次裝飾的stream提供了流的底層表達方式,而另一組IO物件Reader和Writer提供了面向程式設計師的便捷API。

0x02 Writer

與輸入流對應的就是Writer,這裡簡單介紹一個方便的物件:PrintWriter。
想必大家都比較熟悉System.out.println("");,來看PrintWriter提供的檔案寫入方式。

var out = new PrintWriter(new FieWriter("/home/adm/abc.txt"));
out.println("Hello World!");

上述例項化out物件的PrintWriter構造方法引數可以參考上文進行多種裝飾和巢狀。

待續。。