一、認識RandomAccessFile類
RandomAccessFile是Java提供的對文件內容的訪問,既能夠讀取文件,也能夠寫文件;
RandomAccessFile支持隨機訪問文件,可以訪問文件的任意位置。
(1)打開文件,有兩種打開模式-----“rw”(讀寫)、“r”(只讀)
RandomAccessFile raf=new RandomAccessFile(file,“rw”);
RandomAccessFile能夠隨機讀取文件的內容是因為存在一個指針,記錄讀取或者寫入的位置,打開文件是pointer=0;
(2)寫方法
寫方法一次只能寫入一個字節,寫入后指針指向下一個位置
raf.write(int);//斜土的是int的后8位
(3)讀方法
同樣的讀方法也是一次讀取一個字節
int b=raf.read();
(4)文件讀寫完成后要關閉
raf.close();
簡單操作
package com.neuedu.demo01;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.RandomAccessFile;
import java.util.Arrays;
public class RandomAccessFiledemo {
public static void main(String[] args)throws IOException {
File demo=new File("demo");
if (!demo.exists()) {
demo.mkdir();
}
File file=new File(demo,"raf.bat");
if (!file.exists()) {
file.createNewFile();
}
RandomAccessFile raf=new RandomAccessFile(file, "rw");
System.out.println("向文件中寫入");
raf.write('A'); //寫入一個字符,只會寫入第八位
raf.write('B');
int i=112324;
//用write方法每次只能寫一個字節,如果要把i寫進去需要寫4次
raf.write(i>>>24);
raf.write(i>>>16);
raf.write(i>>>8);
raf.write(i);
raf.writeInt(i); //也可以直接寫入一個整數,占4個字節,底層實現就是上面的方法
raf.writeUTF("這是一個UTF字符串"); // 這個長度寫在當前文件指針的前兩個字節處,可用readShort()讀取
raf.writeDouble(8.236598); // 占8個字節
raf.writeBoolean(true); // 占1個字節
raf.writeShort(395); // 占2個字節
raf.writeLong(2325451l); // 占8個字節
raf.writeFloat(35.5f); // 占4個字節
raf.writeChar('a'); // 占2個字節
String string="中";
byte [] by=string.getBytes();
raf.write(by);
System.out.println(raf.getFilePointer());
//讀取文件,把指針移到讀取的位置---利用的是seek()
raf.seek(0); ///將指針移到文件的開頭
//一次性讀取,就是把文件中的內容都讀取到字節數組中
byte [] buffer=new byte[(int)raf.length()];
raf.read(buffer);
//將文件一次性讀取到字節數組中
System.out.println("輸出文件全部內容:");
System.out.println(Arrays.toString(buffer));
for (byte b : buffer) {
System.out.print(Integer.toHexString(b &0xff)+" "); //以十六進制輸出
}
System.out.println();
raf.seek(2); //將指針移到第三個字節位置
int readInt = raf.readInt(); //讀取一個整數
System.out.println(readInt);
raf.skipBytes(4); //跳過一個int
System.out.println(raf.readUTF()); //輸出UTF語句
}
}