標籤:
1. 流式IO結構
只給出了較為常用的IO流的類圖結構
Java的IO流主要分為兩大類:位元組流和字元流,位元組流以InputStream和OutputStream為基礎類,字元流以Reader和Writer為基礎類。
2. 位元組流
位元組流以InputStream和OutputStream為基礎類,常用的子類流有:
FileInputStream和FileOutputStream用於從檔案讀寫位元據;
FilterInputStream和FilterOutputStream即過濾流,過濾流可以嵌套基本二進位輸入輸出資料流或者其他過濾流,增強處理輸入輸出資料流的處理能力。其中BufferedInputStream和BufferedOutputStream流提供了讀寫緩衝的功能,DataInputStream和DataOutputStream提供了對位元組流讀寫的更多支援(如:讀寫二進位整數等);
ObjectInputStream和ObjectOutputStream用於讀寫對象,對象所屬的類需要實現Serializable介面,現在更常用的方式應該是使用JSON格式來傳遞對象;
讀寫二進位檔案通常使用如下嵌套流的方式:
new DataInputStream(new BufferedInputStream(new FileInputStream(new File(filename))));
new DataOutputStream(new BufferedOutputStream(new FileOutputStream(new File(filename))));
3.字元流
字元流以Reader和Writer為基礎類,常用的子類有:
FileReader和FileWriter類用於從檔案讀寫文本資料;
BufferedReader和BufferWriter用於讀寫文本資料,提供了讀寫緩衝的功能,通常用於封裝其他的字元輸入輸出資料流;
BufferedReader類中常用的方法是readLine讀入一行資料,然後使用String類的相關API處理,更常用的方式是使用java.util.Scanner類來對讀字元流提供更多支援;
PrintWriter類對寫字元流提供了更多支援;
讀寫文字檔通常使用如下嵌套流的方式:
new BufferedReader(new FileReader(new File(...));
new PrintWriter(new BufferedWriter(new FileWriter(new File(...))));
4. 位元組流和字元流的轉換
位元組流轉換成字元流使用InputStreamReader:
new BufferedReader(new InputStreamReader(inputStream));
字元流轉換成位元組流使用OutputStreamWriter:
new BufferedWriter(new OutputStreamWriter(outputStream));
5. ZIP檔案輸入輸出資料流
Java中提供了對zip壓縮檔讀寫支援,相關類在java.util.zip包中。
ZipInputStream類和ZipOutputStream分別繼承成自java.io.FilterInputStream類和java.io.FilterOutputStream類,用於讀寫zip壓縮檔。
ZipEntry類用於表示zip檔案中的一個條目,讀寫zip檔案,首先建立ZipInputStream或者ZipOutputStream,然後使用getNextEntry方法擷取zip檔案中的每個被壓縮的檔案,依次處理,每個處理完成一個條目之後,調用closeEntry方法關閉當前條目,處理完整個zip檔案後,調用close方法關閉整個zip檔案。
下面給出一個依次列印zip檔案中所有檔案內容的例子:
ZipInputStream zin = new ZipInputStream(new FileInputStream("test.zip"));ZipEntry zipEntry;Scanner scanner;while( (zipEntry = zin.getNextEntry() ) != null ){ scanner = new Scanner(zin); System.out.println(zipEntry.getName()); //輸出檔案名稱 //輸出檔案內容 while(scanner.hasNextLine()) { System.out.println(scanner.nextLine()); } zin.closeEntry();}zin.close();
Java流式IO