暑期自學 Day 04 | File 類 和 IO 流(四)

Borris發表於2020-05-08

IO 異常的處理 (try-catch-finally)

  • 程式碼示例

    FileWriter fw = null; // 提高 fw 作用域,使 finally 能夠使用 fw.
    try {
      fw = new FileWriter("d:\\testfolder\\a.txt");
      fw.write('a');
    } catch (IOException e) {
      e.printStackTrace();
    } finally {
      // 如果傳遞的路徑不存在,會丟擲空指標異常,所以需要先行判斷 fw 是否為 null
      if (fw != null) {
          try {
              fw.close();
              } catch (IOException) {
                  e.printStackTrace();
          }
      }
    }
  • JDK7 開始的新特性

    • try 後面可以加個括號,括號中定義流物件。這樣不用寫 finally, 流物件使用完後自動釋放。
      try (FileWriter fw = new FileWriter("d:\\testfolder\\a.txt")) {
        fw.write('a');
      } catch (IOException e) {
        e.printStackTrace();
      }
  • JDK9 的新特性

    • try 前面定義流物件,try 後面的 () 中可以直接引入流物件名稱

    • 由於在 try 前面新建了流物件,我們也需要對流物件中傳遞的路徑進行異常處理: throws FileNotFoundException

      FileWriter fw = new FileWriter("d:\\testfolder\\a.txt");
      FileReader fr = new FileWriter("d:\\testfolder\\b.txt");
      try (fw; fr) {
        fw.write('a');
      } catch (IOException e) {
        e.printStackTrace();
      }

屬性集 Propertites

  • 持久屬性集,可以儲存在流中或在流中載入,是繼承了 HashTable 的集合
  • 唯一和IO流相結合的集合
  • 雙列集合,因為繼承了 HashTable。key, value 都是字串型別的
  • 特有操作字串的方法:
    儲存獲取方法:
    • Object setProperty(String key, String value) 呼叫 HashTable 方法 put
    • String getProperty(String key) 用指定鍵在屬性列表中搜尋屬性,相當於 Map.get()
    • Set<String> stringPropertyNames() 返回此屬性列表中的鍵集,相當於 keySet()方法
    與流相關的方法
    • public void store(OutputStream out,String comments)public void store(Writer w,String comments)將集合中的臨時資料,持久化寫入到硬碟中儲存
    • public void load(InputStream in)public void load(Reader r) 將檔案中儲存的鍵值對,取出到集合中使用

緩衝流

  • 給流物件建立一個緩衝陣列,透過緩衝區讀寫,減少系統IO次數,從而提高流物件讀取效率。
位元組緩衝輸出輸入流
  • public BufferedOutputStream(OutputStream out), public BufferedInputStream(InputStream in)

  • 使用步驟

    • 建立流物件,構造方法中傳遞檔案路徑
    • 建立相應的緩衝流物件,構造方法中傳遞流物件
    • 使用緩衝流物件中的 write() 方法,把資料寫入到內部緩衝區
    • 使用緩衝流物件中的 flush() 方法,吧緩衝區資料重新整理到檔案中
    • 釋放資源(如果選擇釋放資源,flush() 方法可以省略)
  • 注意:

    • 緩衝流構造方法中可以寫第二個引數,指定緩衝流內部緩衝區大小。
    • 緩衝流寫入時如果不釋放或者重新整理,緩衝區資料無法寫入指定檔案。
    • 緩衝流 write(), read() 方法和之前IO流中使用方法一樣。如 read() 可以讀取位元組陣列等等……
本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章