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);
}
}
主要注意頭注釋裡面的内容。