標籤:抽象類別 tab catch nts 關聯 位元組流 adl class one
一、流
Java通過流實現I/O,流是一種可以產生或使用資訊的抽象。
Java定義了兩種類型的流:
- 位元組流:處理位元組的輸入和輸出,例如讀寫位元據。
- 字元流:處理字元的輸入和輸出。
在底層所有I/O仍然是面向位元組的,字元流知識為處理字元提供更高效的方法。
二、位元組流類
BufferedInputStream BufferedOutputStream |
緩衝的輸入資料流 緩衝的輸出資料流 |
ByteArrayInputStream ByteArrayOutputStream |
讀取位元組數組的輸入資料流 寫入位元組數組的輸出資料流 |
DataInputStream DataOutputStream |
讀取標準資料類型的方法的輸入資料流 寫入標準資料類型的方法的輸出資料流 |
FileInputStream FileInputStream |
讀取檔案的輸入資料流 寫入檔案的輸出資料流 |
InputStream OutputStream |
描述流輸入的抽象類別 描述流輸出的抽象類別 |
FilterInputStream FilterOutputStream |
實現InputStream 實現OutputStream |
ObjectInputStream ObjectOutputStream |
對象的輸入資料流 對象的輸出資料流 |
PipedInputStream PipedOutputStream |
輸入管道 輸出管道 |
PrintStream |
包含print和println的輸出資料流 |
PushbackInputStream |
允許位元組返回的輸入資料流 |
SequenceInputStream |
由多個依次讀取的輸入資料流組合而成的輸入資料流 |
三、字元流類
BufferedReader BufferedWriter |
緩衝的輸入字元流 緩衝的輸出字元流 |
CharArrayReader CharArrayWriter |
從字元數組讀取內容的輸入資料流 向字元數組寫入內容的輸出資料流 |
FileReader FileWriter |
讀取檔案的輸入資料流 寫入檔案的輸出資料流 |
FilterReader FilterWriter |
過濾的讀取器 過濾的寫入器 |
InputStreamReader OutputStreamWriter |
將位元組轉換為字元的輸入資料流 將字元轉換為位元組的輸出資料流 |
StringReader StringWriter |
從字串讀取內容的輸入資料流 向字串寫入內容的輸出資料流 |
PipedReader PipedWriter |
輸入管道 輸出管道 |
Reader Writer |
描述字元流輸入的抽象類別 描述字元流輸出的抽象類別 |
PrintWriter |
包含print和println的輸出資料流 |
PushbackReader |
允許字元返回的輸入資料流 |
LineNumberReader |
支援行操作的輸入資料流 |
四、預定義流
System包含的預定義流
- System.out:標準輸出資料流,PrintStream類型對象。
- System.err:標準錯誤流,PrintStream類型對象。
- System.in:標準輸入資料流,InputStream類型對象。
五、控制台
import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.io.PrintWriter;class Solution { public static void main(String[] args) throws IOException { BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); char c = (char) reader.read();//擷取字元 System.out.write(c); String str = reader.readLine();//讀取字串 PrintWriter writer = new PrintWriter(System.out, true); writer.println(str); }}View Code
六、讀寫檔案
import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;class Solution { static String read(String fileName) { FileInputStream fin = null; StringBuilder builder = new StringBuilder(); try { fin = new FileInputStream(fileName); int i; do { i = fin.read();//讀取位元組 if (i != -1)//-1表示到達檔案結尾 builder.append((char) i); } while (i != -1); } catch (FileNotFoundException exc) { System.out.println("Cannot open file"); } catch (IOException exc) { System.out.println("Cannot read file"); } finally { try { if (fin != null) fin.close(); } catch (IOException exc) { System.out.println("Cannot close file"); } } return builder.toString(); } static void write(String fileName, String content) { FileOutputStream fout = null; try { fout = new FileOutputStream(fileName); for (int i = 0; i < content.length(); i++) fout.write((int) content.charAt(i));//寫入位元組 } catch (FileNotFoundException exc) { System.out.println("Cannot open file"); } catch (IOException exc) { System.out.println("Cannot write file"); } finally { try { if (fout != null) fout.close(); } catch (IOException exc) { System.out.println("Cannot close file"); } } }}View Code
自動關閉檔案,離開代碼塊後會隱式調用close方法關閉流關聯的對象。
import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.IOException;class Solution { public static void main(String[] args) { try (FileInputStream fin = new FileInputStream("file.txt")) { int i; do { i = fin.read(); if (i != -1) System.out.print((char) i); } while (i != -1); } catch (FileNotFoundException exc) { System.out.println("Cannot open file"); } catch (IOException exc) { System.out.println("Cannot read file"); } }}View Code
Java筆記:I/O