Java中如何使用隨機存取檔案RandomAcessFile類?

飄走的我發表於2016-08-16

 InputStreamOutputStream都只是單方面的讀和寫檔案的內容,如果有隨機的讀取和寫入檔案內容的需要那該怎麼辦?

Java為我們提供了一個RandomAcessFile類,它就是專門用來隨機存取檔案的內容的。

  RandomAcessFile操作檔案內容的時候,就好像操作一塊記憶體區域一樣。把位元組用下標數字來進行定位,通過呼叫RandomAcessFileAPI方法,把指標的指向進行一定,達到隨機存取資料的目的,主要的方法如下:

length()  得到檔案內容的位元組長度

seek()    設定到此檔案開頭測量到的檔案指標偏移量,在該位置發生下一個讀取或寫入操作。

read()和write() 讀取和寫入位元組資料

以下是將檔案中的所有字母a換成字母的c的示例程式。

public class Test5 {

	public static void main(String[] args) {
		try {
			//建立隨機讀取檔案物件
			RandomAccessFile file=new RandomAccessFile("D://1.txt", "rw");
			//遍歷file的位元組的資料
			try {
				for (int i = 0; i < file.length(); i++) {
					byte b=(byte) file.read();//read()方法讀取一個位元組
					char c=(char) b;//轉換成char型別
					if(c=='a'){
						file.seek(i);
						file.write('c');//這個位置寫入新的字元
					}
				}
				file.close();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
}

說明:RandomAcessFile的大多數方法都會丟擲IOException,以上示例程式只是簡單的try-catch,而在實際的開發中,應該針對不同的情況,不同的異常做出不同的響應。

 

總結:

RandomAcessFile的使用思路主要包括以下一些專案:

1.length()方法獲取檔案的內容長度

2.seek()方法隨機的到達任何需要儲存資料的地方

3.呼叫read()方法獲取當前位置的資料,用write()方法寫入資料

4.完成需要後,調研close方法關閉檔案的開啟



相關文章