Java基礎-學習筆記17

JuneFall發表於2024-09-09

17 IO流

1. IO流

  • 檔案

檔案在程式中是以流的形式來操作的。

:資料在資料來源(檔案)和程式(記憶體)之間經歷的路徑
輸入流:資料從資料來源(檔案)到程式(記憶體)的路徑
輸出流:資料從程式(記憶體)到資料來源(檔案)的路徑

  • 常用的檔案操作

  • 獲取檔案的相關資訊

  • IO流原理及流的分類

I/O (Input/Output) 技術,用於處理資料傳輸。如讀/寫檔案,網路通訊等。

* 按運算元據單位:
    * 位元組流(8 bit)(方便二進位制檔案操作)(以位元組為單位讀取)
    * 字元流(方便文字檔案操作)(按字元為單位)
* 按資料流的流向:
  * 輸入流
  * 輸出流
* 按流的角色:
  * 節點流
  * 處理流/包裝流

  • 物件流

ObjectOutputStream 提供序列化功能(序列化:儲存資料的值和資料型別)
ObjectInputStream 提供反序列化功能(反序列化:恢復資料的值和資料型別)

需要讓某個物件支援序列化機制,則必須讓其類是可序列化的,為了讓某個類是可序列化的,該類必須實現兩個介面之一:

Serializable // 這是一個標記介面,沒有方法
Externalizable // 該介面有方法需要實現,因此一般都實現 Serializable 介面
String filePath = "C:\\CloudMusic\\try.dat"; // 這裡字尾不管定義什麼,最後都會按Java自己的字尾dat儲存

ObjectOutputStream ois = new ObjectOutputStream(new FileOutputStream(filePath));
ois.writeInt(100);
ois.writeBoolean(true);
ois.writeUTF("韓順平");
ois.writeObject(new User(10,27,"ZhangSan"));
ois.close();
System.out.println("ok=========");

ObjectInputStream ois2 = new ObjectInputStream(new FileInputStream(filePath));
System.out.println(ois2.readInt()); // 100
System.out.println(ois2.readBoolean()); // true
System.out.println(ois2.readUTF()); // 韓順平 
User us1 = (User)ois2.readObject(); // 注:User物件要實現Serializable介面。且對本類來說,擁有可引用的許可權,才能正確讀取
System.out.println(us1); // User{id=10, age=27, name='ZhangSan'}
System.out.println(us1.getName()); // ZhangSan
ois2.close();

使用細節:

1) 讀寫順序要一致
2)要求序列化或反序列化的物件,要實現 Serializable
3)序列化的類中建議新增 SerialVersionUID,為了提高版本的相容性
4)序列化物件時,預設將裡面所有屬性都進行序列化,但除了 static 或 transient 修飾的成員
5)序列化物件時,要求裡面屬性的型別也需要實現序列化介面
6)序列化具備可繼承性,也就是如果某類已經實現了序列化,則它的所有子類也已經預設實現了序列化

  • 標準輸入輸出流

System.in
編譯型別:InputStream
執行型別:BufferedInputStream

System.out
編譯型別:PrintStream
執行型別:PrintStream

  • 轉換流

解決檔案亂碼問題

InputStreamReader:Reader 的子類,可以將 InputStream(位元組流) 包裝/轉換成 Reader(字元流)

OutputStreamWriter:Writer 的子類,實現將 OutputStream(位元組流) 包裝/轉換成 Writer(字元流)

當處理純文字資料時,如果使用字元流效率更高,並且可以有效解決中文問題,所以建議將位元組流轉換為字元流

位元組流檔案可以在使用時指定編碼格式(比如 utf-8, gbk, gb2312, ISO8859-1 等),再透過轉換流轉成字元流

  • 列印流

列印流只有輸出流,沒有輸入流

在預設情況下,PrintStream 輸出資料的位置是 標準輸出,即顯示器
可以自己修改列印流輸出的位置/裝置

System.setOut(new PrintStream("C:\\CloudMusic\\test.txt"));// 修改輸出到檔案
System.out.println("hello, 韓順平教育~");

2. Properties 類

  • 基本介紹
    Properties 類是 HashTable 的一個子類,專門用於讀寫配置檔案的集合類,配置檔案的格式:
    鍵=值
    鍵=值
    (注意:鍵值對不需要有空格,值不需要用引號引起來,預設型別是 String

  • 常見方法

相關文章