[java IO流]之 隨機訪問檔案(RandomAccessFile類)

小杆子發表於2021-02-10
概述:

此類的例項支援對隨機訪問檔案的讀取和寫入,RandomAccessFile類預設使用的編碼是ISO-8859-1,所以在使用這個類的讀寫的時候,一定要注意編碼格式。

特點:

1.RandomAccessFile類不屬於流,是Object類的子類

2.包含了InputStream和OutputStream的功能

3.能支援讀寫基本型別

4.支援對隨機訪問檔案的讀取和寫入

構造方法:

RandomAccessFile(String name,String mode)

RandomAccessFile raf=new RandomAccessFile("E:\\File\\2.txt", "r");
mode引數的對照表:

【java IO流】之 隨機訪問檔案(RandomAccessFile類)

1.讀取

使用RandomAccessFile類的readLine()讀取檔案的時候,會亂碼,所以應該轉換為支援的編碼

RandomAccessFile raf=new RandomAccessFile("E:\\File\\2.txt", "r");

System.out.println(new String(raf.readLine().getBytes("ISO-8859-1"),"GBK"));

2.寫入

RandomAccessFile raf=new RandomAccessFile("E:\\File\\5.txt", "rw");

raf.writeBytes("大家好,才是真的好!\n");//使用提供的編碼寫入

raf.write("大家好,才是真的好!".getBytes());//轉換為位元組陣列然後寫入

結果圖:

【java IO流】之 隨機訪問檔案(RandomAccessFile類)

可見,使用自帶的編碼寫入,會出現亂碼,如果轉換為位元組陣列寫入,不會出現亂碼。

3.寫入改進:

RandomAccessFile raf=new RandomAccessFile("E:\\File\\5.txt", "rw");

  //轉換成RandomAccessFile類對應的的編碼

  String  s=new String("大家好,才是真的好!\n".getBytes(),"ISO-8859-1");

  raf.writeBytes(s);

  raf.write("大家好,才是真的好!".getBytes());

結果圖:

【java IO流】之 隨機訪問檔案(RandomAccessFile類)

注意:RandomAccessFile 讀寫檔案時,不管檔案中儲存的資料編碼格式是什麼 使用 RandomAccessFile物件方法的 readLine() 都會將編碼格式轉換成 ISO-8859-1 所以 輸出顯示是還要在進行一次轉碼。在使用的過程中,一定要注意編碼格式。
本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章