RandomAccessFile Java提供的对文件内容的访问,既可以读文件也可以写文件,可以访问文件的任意位置适用于由大小已知的记录组成的文件
1. Java文件模型
在硬盘上的文件是byte byte byte存储的,是数据的集合
2. 打开文件
有两种模式“”rw“” “”r“”(只读)
RandomAccessFile raf=new RandomAccessFile (file,"rw")
内部包含一个文件指针,打开文件时指针在开头pointer=0;读写操作时指针会往后移动
3. 写方法
raf.write(int)-->只写一个字节(后八位)同事指针指向下一个位置,准备再次写入。
4. 读方法
int b=raf.read()-->读一个字节
5. 文件读写完成后一定要关闭(否则会出现意想不到的错误)
package iO;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.RandomAccessFile;
import java.util.Arrays;
public class RafDemo {
public static void main(String[] args) throws IOException {
File demo=new File("demo");
if(!demo.exists()){
demo.mkdir();
}
File file=new File(demo,"raf.dat");
if(!file.exists()){
file.createNewFile();
}
RandomAccessFile raf=new RandomAccessFile( file, "rw");
System.out.println(raf.getFilePointer());
raf.write('A');//write方法只写一个字节,一个char是两个字节,所以会把A的后八位写进去
System.out.println(raf.getFilePointer());
int i=0x7fffffff;
raf.write(i>>>24);
raf.write(i>>>16);
raf.write(i>>>8);
raf.write(i);//相当于raf.writeInt();
System.out.println(raf.getFilePointer());
String s="中";//也可以直接写一个数组
byte[] gbk=s.getBytes();
raf.write(gbk);
System.out.println(raf.getFilePointer());
System.out.println(raf.length());
//读文件必须把指针移动到头部
raf.seek(0);
//一次性全部读取
byte[]buf=new byte[(int)raf.length()];
raf.read(buf);
System.out.println(Arrays.toString(buf));
//最终一定要关闭,close
raf.close();
}
输出结果: