3. RandomAccessFile类
3.1 RandomAccessFile类简介
1. 是Java提供的对文件内容的访问,既可以读文件,也可以写文件
2. 可以随机访问文件,可以访问文件的任意位置
3. 读写方式:rw(可读写), r(只读)
例:RandomAccessFile raf = new RandomAccessFile(file,"rw")
4. 由于是随机访问,该类提供了一个指针,默认打开文件的时候指正文件在开头 pointer = 0
5. 写方法
raf.write(int) -->只写一个字节(后8位),同时,指针指向下一个位置,准备再次写入
6. 读方法
int b = raf.read() -->读一个字节
7. 文件读写完成一定要关闭
3.2 示例
public static void main(String[] args) throws Exception {
// 创建目录
File demo = new File("Demo");//未指定绝对路径,默认是本项目下
if(!demo.exists()){
demo.mkdir();
}
// 创建文件
File file = new File(demo,"raf.dat");//在demo目录下创建raf.dat文件
if(!file.exists()){
file.createNewFile();
}
RandomAccessFile raf = new RandomAccessFile(file, "rw");
// 指针位置
System.out.println("起始指针位置:" + raf.getFilePointer()); // 0
// 写操作
raf.write('A'); //只写了一个字节
System.out.println("写入一次后的指针位置:" + raf.getFilePointer()); // 1
raf.write('B');
System.out.println("写入两次后的指针位置:" + raf.getFilePointer()); // 2
// 最大整数
int i = 0x7fffffff;
// 用write方法每次只能写入一个字节,如果要把i写进去就得写4次
raf.writeInt(i >>> 24); //高8位
raf.writeInt(i >>> 16); //次8位
raf.writeInt(i >>> 8);
raf.writeInt(i); //最后8位
System.out.println("指针位置:" + raf.getFilePointer()); // 18
// 写入中文
String s = "中";
byte[] bytes = s.getBytes("utf8");
raf.write(bytes);
System.out.println("指针位置:" + raf.getFilePointer()); // 21
// 文件长度
System.out.println(raf.length());
// 读文件. 必须把指针移到头部
raf.seek(0);
// 一次性读取,把文件中的内容全部读取到字节数组中
byte[] buf = new byte[(int)raf.length()];
raf.read(buf);
System.out.println(Arrays.toString(buf));
raf.close();
}