RandomAccessFile类 是java提供的对文件内容的访问,即可以读取文件,也可以写文件。
RandomAccessFile类支持随机访问文件,可以访问文件的任意位置
********RandomAccessFile类实现步骤
(1)java文件的模型
在硬盘上的文件是byte byte byte 存储的,是数据的集合
(2)打开文件
有两种模式“rw”(读写) “r”(只读)
RandomAccessFile raf = new RandomAccessFile(new File(“路径”),”rw”);
文件指针,打开文件时指针在开头 pointer = 0;
(3)写方法
raf.write(int)—>只写一个字节(后8位),同时指针指向下一个位置,准备再次写入
(4)读方法
int b = raf.read()—>读一个字节
(5)关闭流
文件读写完成以后一定要关闭流(Oracle官方说明)
****************RandomAccessFile 类的方法
raf.getFilePointer();—>获取指针的位置
//迅雷实现下载功能,多个进程同时下载一个文件的不同位置,然后将下载后的文件拼接在一起
raf.writeInt(i);//写入一个int
//writeInt()方法的内置代码
raf.write(i>>>24);//高八位向右移动三位
raf.write(i>>>16);
raf.write(i>>>8);
raf.write(i>>>0);
//中文两个字节,字母两个字节,int八个字节
读文件时,必须把指针移动到头部
raf.seek(0);//移动指针到index的位置
raf.length();返回的是lang
//一次性读取,把文件中的内容都读取到字节数组中
byte[] buf = new byte[(int)raf。length()]
raf.read(buf);
//变成字符串,装入数组中进行输出
Arrays.toString(buf);
for(byte b : buf){
//以16进制进行输出
Integer.toHexString(b&0xff)+”“;
}
raf.close();
public class TestDemo{
public static void main(String[] args) throws IOException{
File demo=new File("demo");
File file=new File(demo,"raf.txt");
RandomAccessFile raf=new RandomAccessFile(file,"rw");
raf.write('A');//只写了一个字节,char类型
System.out.println(""+raf.getFilePointer());
int i=0x7fffffff;
//用write方法,每次只能写一个字节,把i写进去就要写4次
raf.write(i>>>24);//高8位
raf.write(i>>>16);
raf.write(i>>>8);
raf.write(i);
System.out.println(""+raf.getFilePointer());
//可以直接写一个int
raf.writeInt(i);
System.out.println(""+raf.getFilePointer());
String s="中";
byte[] b=s.getBytes("gbk");
raf.write(b);
System.out.println(""+raf.length());
//读文件,必须把指针指到头部
raf.seek(0);
//一次性读取,把文件内容都读取到字节数组中
byte[] buf=new byte[(int)raf.length()];
raf.read(buf);
System.out.println(""+Arrays.toString(buf));
for (byte c : buf) {
System.out.println(Integer.toHexString(c&0xff)+"");
}
raf.close();//关闭
}
}