Java中I/O包中的——“非流類RandomAccessFile類”——讀、寫文件數據的功能(只讀、可讀寫等)

說明:
在IO包中,提供了一個RandomAccesseFile類,它不屬於流類,但具有讀寫文件數據的功能,可以隨機從文件的任何位置開始並以指定的操作權限(如只讀、可讀寫等)執行讀寫數據的操作。
RandomAccesseFile類構造方法:
在這裏插入圖片描述
RandomAccessFile(String name,String mode)中的參數mode用於指定訪問文件的模式,也就是文件的操作權限。

參數mode取值:

r:以只讀的方式打開文件。如果執行寫操作,會報IOException異常。
rw:以“讀寫”的方式打開文件。如果文件不存在,會自動創建該文件。
rws:以“讀寫”方式打開文件。與“rw”相比,它要求對文件的內容或元數據的每個更新都同步寫入到底層的存儲設備。
rwd:以“讀寫”方式打開文件。與“rw”相比,它要求對文件的內容的每個更新都同步寫入到底層的存儲設備。
RandomAccessFile raf = new RandomAccessFile("c:\\javas\\b.txt", "r");
   raf.write(97);//報錯,拒絕訪問,因爲r是隻讀參數

原理:
RandomAccessFile對象包含了一個記錄指針來標識當前讀寫處的位置。
當新建RandomAccessFile對象時,該對象的文件記錄指針會在文件開始處(即標識爲0的位置);
當讀寫了n個字節後,文件記錄指針會向後移動n個字節。
除了按順序讀寫外,RandomAccessFile對象還可以自由的移動記錄指針,既可以向前移動,也可以向後移動。
RandomAccessFile常用方法:
在這裏插入圖片描述
說明:
seek(long pos)方法可以使RandomAccessFile對象中的記錄指針向前、向後自由移動,通過getFilePointer()方法,便可獲取文件當前記錄指針的位置。
示例(模擬軟件使用次數):
首先在記事本中寫入使用的次數;
在這裏插入圖片描述
然後就可以使用代碼來實現了:

package liu;

import java.io.IOException;
import java.io.RandomAccessFile;

public class RandonAccesseFile_Use {
  public static void main(String[] args) throws IOException {
     RandomAccessFile raf3 = new RandomAccessFile("c:\\javas\\bbc.txt", "rw");
   int times =Integer.parseInt(raf3.readLine())-1 ;//raf3.readLine();//返回的是字符串  Integer.parseInt將字符串轉換爲int類型
   if(times>0) {
    System.out.println("你還有"+times+"次試用機會");
    raf3.seek(0);
    raf3.write((times+"").getBytes());//times+""-------自動轉換爲字符串
   }else {
    System.out.println("試用結束");
   }
  }
}

在這裏插入圖片描述
可以運行5次,最終結果:
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章