簡介:
RandomAccessFile類可以對文件隨機訪問的操作,訪問包括讀和寫操作。該類的讀寫是基於指針的操作。
RandomAccessFile對文件進行隨機訪問操作時有兩個模式,一種是隻讀(r),另一種是讀寫(rw),需在創建RandomAccessFile對象時傳入一個參數進行設置,第一個參數代表要訪問的文件,第二個參數代表設置訪問模式
RandomAccessFile(File file,String mode)
RandomAccessFile(String filename,String mode)
只讀模式: new RandomAccessFile(“filename”,”r”);
讀寫模式: new RandomAccessFile(filename,”rw”);
public static void main(String[] args) throws IOException {
//以讀寫方式打開並寫入一行文本
File fis = new File("test.date");
RandomAccessFile raf = new RandomAccessFile(fis, "rw");
byte[] writeStr = "this is a demo!".getBytes();
raf.write(writeStr);
raf.close();
//以只讀方式打開並讀取一行數據
RandomAccessFile rafRead = new RandomAccessFile("test.date", "r");
System.out.println(rafRead.readLine());
rafRead.close();
}
運行結果:
this is a demo!
RandomAccessFile常用方法彙總:
void write(int d)
該方法會根據當前指針所在位置處寫入一個字節,是將參數int的”低8位”寫出
int read()
如果返回-1表示讀取到了文件末尾EOF(EOF:End Of File)! 每次讀取後自動移動文件指針, 準備下次讀取。
void write(byte[] d)
根據當前指針所在位置處連續寫出給定數組中的所有字節
void write(byte[] d,int offset,int len)
根據當前指針所在位置處連續寫出給定數組中的部分字節,這個部分是從數組的offset處開始,連續len個字節
int read(byte[] b)
從文件中嘗試最多讀取給定數組的總長度的字節量,並從給定的字節數組第一個位置開始,將讀取到的字節順序存放至數組中,返回值爲實際讀取到的字節量
void close()
RandomAccessFile在對文件訪問的操作全部結束後,要調用close()方法來釋放與其關聯的所有系統資源
public static void main(String[] args) throws IOException {
//以讀寫方式打開並寫入一行文本
File fis = new File("test.dat");
RandomAccessFile rafw = new RandomAccessFile(fis, "rw");
byte[] writeStr = "this is a demo!\n".getBytes();
for(int i = 0; i < 10; i++) {
rafw.write(writeStr, 0, writeStr.length);
}
rafw.close();
//以只讀方式打開test.dat
RandomAccessFile rafr = new RandomAccessFile(fis, "r");
byte[] rd = new byte[1024];
int len = -1;
//循環讀取,讀到結束後len被重新賦值爲-1
while((len = rafr.read(rd))!= -1) {
System.out.println(new String(rd));
}
System.out.println("讀取結束,len="+len);
rafr.close();
}
運行結果:
this is a demo!
this is a demo!
this is a demo!
this is a demo!
this is a demo!
this is a demo!
this is a demo!
this is a demo!
this is a demo!
this is a demo!
讀取結束,len=-1
文件指針操作:
RandomAccessFile的讀寫操作都是基於指針的,也就是說總是在指針當前所指向的位置進行讀寫操作。
long getFilePointer()
獲取當前指針位置
void seek(long pos)
使用該方法可以移動指針到指定位置。
int skipBytes(int n)
嘗試跳過輸入的 n 個字節以丟棄跳過的字節
實現文件追加:
public static void main(String[] args) throws IOException {
RandomAccessFile raf = new RandomAccessFile("test.dat", "rw");
//將記錄指針移動到文件最後 ,進行追加操作
raf.seek(raf.length());
raf.write("追加後的文本\n".getBytes());
raf.close();
}
運行後test.dat文本內容:
this is a demo!
this is a demo!
this is a demo!
this is a demo!
this is a demo!
this is a demo!
this is a demo!
this is a demo!
this is a demo!
this is a demo!
追加後的文本
總結:
RandomAccessFile,優點是可以控制指針的位置,對文件進行指定位置的讀寫操作。
但是同時也有一些缺點,執行效率比較慢,大量進行指針控制操作很耗內存。