天天看點

RandomAccessFile類的使用,随機讀寫檔案。

RandomAccessFile類的使用,随機讀寫檔案。

此類的執行個體支援對随機通路檔案的讀取和寫入。随機通路檔案的行為類似存儲在檔案系統中的一個大型 byte 數組。存在指向該隐含數組的光标或索引,稱為檔案指針;輸入操作從檔案指針開始讀取位元組,并随着對位元組的讀取而前移此檔案指針。如果随機通路檔案以讀取/寫入模式建立,則輸出操作也可用;輸出操作從檔案指針開始寫入位元組,并随着對位元組的寫入而前移此檔案指針。寫入隐含數組的目前末尾之後的輸出操作導緻該數組擴充。該檔案指針可以通過

getFilePointer

方法讀取,并通過

seek

方法設定。

import java.io.*;
public class RandomAccessFileDemo01{
	public static void main(String[] args)throws Exception{          //判斷是否是目錄
		File f = new File("d:"+File.separator+"test.txt");          //在建立檔案是,使用File.separator讀取系統預設的目錄格式,有很好的移植性。
		RandomAccessFile raf = null;
		raf = new RandomAccessFile(f,"rw");     //讀寫模式,如果檔案不存在,則建立
		String name=null;
		int age = 0;
		name = "zhangsan";
		age=30;
		raf.writeBytes(name);             //寫入檔案中
		raf.writeInt(age); 
		name = "lisi    ";
		age=30;
		raf.writeBytes(name);             //寫入檔案中
		raf.writeInt(age); 
		name = "wangwu  ";
		age=30;
		raf.writeBytes(name);             //寫入檔案中
		raf.writeInt(age); 
		raf.close();					 //關閉
		System.out.println("寫入成功!");
	}
}
           

寫入成功後來進行随機讀取,使用者可以自己操作想要先讀的資料。

/*
writeByte一次寫8個位元組,writeInt一次寫4個位元組,是以讀也是。
String(byte[] bytes) 通過使用平台的預設字元集解碼指定的 byte 數組,構造一個新的 String。
學習了File後進一步學習RandomAccessFile來向檔案中寫入讀出。
*/
import java.io.*;
public class RandomAccessFileDemo02{
	public static void main(String[] args)throws Exception{          //判斷是否是目錄
		File f = new File("d:"+File.separator+"test.txt");           //在建立檔案是,使用File.separator讀取系統預設的目錄格式,有很好的移植性。
		RandomAccessFile raf = null;   
		raf = new RandomAccessFile(f,"r");                           //讀模式
		String name=null;
		int age = 0;
		byte[] b = new byte[8];
		raf.skipBytes(12);                                           //跳過12個位元組,也就是第一個人的資訊                                        
		for(int i=0;i<b.length;i++){
			b[i]=raf.readByte();
		}
		name = new String(b);                                       //将讀出的位元組轉化成字元串String中的方法
		age = raf.readInt();
		System.out.println("第二個人的資訊--->姓名:"+name+"年齡:"+age);
		//讀取第一個人的資訊
		raf.seek(0);                                                //指針回到檔案的開頭                               
		for(int i=0;i<b.length;i++){
			b[i]=raf.readByte();
		}
		name = new String(b);                                       //将讀出的位元組轉化成字元串String中的方法
		age = raf.readInt();
		System.out.println("第一個人的資訊--->姓名:"+name+"年齡:"+age);
		//讀取第三個人的資訊
		raf.skipBytes(12);                                           //跳過12個位元組,跳過第二個人的資訊,因為讀完了第一個人raf指向在了第二個人的頭                                     
		for(int i=0;i<b.length;i++){
			b[i]=raf.readByte();
		}
		name = new String(b);                                       //将讀出的位元組轉化成字元串String中的方法
		age = raf.readInt();
		System.out.println("第三個人的資訊--->姓名:"+name+"年齡:"+age);
		
	}
}
           

主要注意頭注釋裡面的内容。