iT邦幫忙

2026 iThome 鐵人賽

DAY 23
0

本日學習:
串流 stream

  1. 由字元與位元組成
  2. 可經由串流從資料來源讀寫資料,也可將資料以字元或位元型式寫到檔案
  3. 輸入串流 & 輸出串流
  4. java.io 資料庫處理
  5. 字元串流:Reader and Writer 處理,即純文字檔
  6. 位元串流:InputStream and OutputStream 處理,即二進位檔
  7. 處理方式:先透過檔案相關類別的建構子建立物件 → 利用物件的 write() or read() 函數來讀取或寫入資料 → 處理資料 → close() 關閉串流

檔案的基本處理

  1. 函數通常繼承給子類別使用
  2. Reader 類別的函數:
    • void close():關閉串流
    • int read():讀取串流中的一個字元
    • int read(char[] cbuf):從串流讀取資料並放到字元陣列 cbuf 中,並傳回所讀取字元總數
    • int read(char[] cbuf, int off, int len):從串流讀取資料並放到字元陣列 cbuf 的某個範圍(off:陣列索引值,len:讀取字元數)
    • long skip(long n):跳過 n 個字元不讀取
  3. Writer() 類別的函數:
    • void close():關閉串流
    • abstract void flush():將緩衝區資料寫到檔案裡(寫在 Writer 子類別內)
    • void write(char[] cbuf):將字元陣列 cbuf 輸出到串流
    • void write(char[] cbuf, int off, int len):將字元陣列 cbuf 依指定格式輸出到串流(off:陣列索引值,len:讀取字元數)
    • void write(int c):將單一字元 c 輸入到串流中
    • void write(String str):將字串 str 輸出到串流中
    • void write(String str, int off, int len):將字串 str 輸出到串流(off:陣列索引值,len:讀取字元數)
  4. FileReader:
    • 繼承自 InputStreamReader 類別,它的父類別為 Reader 類別
    • 可讀取文字檔
    • 先呼叫 FileReader() 建構子建立 FileReader 類別的物件,再利用它呼叫 read() 函數來讀取檔案,例如:FileReader(String name)
  5. 文字文件的編碼要選:ANSI
  6. 一格中文字一個字元,換行為兩個字元
  7. FileWriter:
    • 繼承自 OutputStreamWriter 類別,它的父類別為 Writer 類別
    • 將字元型態的資料寫入檔案
    • 先呼叫 FileWriter() 建構子建立 Filewriter 類別的物件,再利用它呼叫 write() 函數來讀取檔案,例如:FileWriter(String filename)、FileWriter(String filename, Boolean a),a 若設為 true,資料會加在原先資料後面
  8. IOEception 例外處理
  9. 以上不使用緩衝區處理,因此存取效率較差

利用緩衝區讀寫資料

  1. 先將資料放到緩衝區而不是磁碟
  2. 會佔一塊記憶體空間
  3. 有資料流失風險
  4. 讀取資料:BufferedReader 類別
    • 先建立 FilReader 物件,再以它為引數建立 BufferedReader 類別的物件,藉此物件來讀取
    • 建構子:BufferedReader(Reader in)、BufferedReader(Reader in, int size)
    • 函數:
      void close():關閉串流
      int read():讀取單一字元
      int read(char[] cbuf, int off, int len)
      long skip(long n):跳過 n 個字元不讀取
      String readLine():讀取一行字串
  5. 輸出資料:BufferedWriter 類別
    • 先建立 FilWriter 物件,再以它為引數建立 BufferedWriter 類別的物件,藉此物件來讀取
    • 建構子:BufferedWriter(Writer out)、BufferedWriter(Reader out, int size)
    • 函數:
      void close():關閉串流
      void flush():寫入緩衝區的字元到檔案
      void write(char[] cbuf, int off, int len)
      void write(String s, int off, int len)
      void write(int c):寫入單一字元
      void newLine():寫入換行字元

上一篇
Day 22:類別(10)
下一篇
Day 24:例外處理
系列文
從零開始學程式語言:Java 新手修煉記 共 24 篇
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言