Java.io.RandomAccessFile
RandomAccessFile Java提供的对文件内容的访问,既可以读文件,也可以写文件。支持随机访问文件,可以访问文件的任意位置。
1)Java文件模型
在硬盘上的文件是byte byte byte存储的,是数据的集合。
2)打开文件
有两种模式 rw 读写 r 只读。
RandomAccessFile randomAccessFile=new RandomAccessFile(file, "rw");
文件指针,打开文件时指针在开头 pointer=0。
3)写方法
randomAccessFile.write('赵');//只写了一个字节,同时指针指向下一个位置,准备再次写入
4)读方法
int b=randomAccessFile.read(...)读一个字节
5)文件读写完成后一定要关闭(Oracle官方说明)
package com.zhao.randomAccessFile; import java.io.File; import java.io.IOException; import java.io.RandomAccessFile; import java.util.Arrays; public class RandomAccessFileDemo { public static void main(String[] args) throws IOException { File directory=new File("demo"); if (!directory.exists()) { directory.mkdir(); } File file=new File(directory, "raf.txt"); if (!file.exists()) { file.createNewFile(); } RandomAccessFile randomAccessFile=new RandomAccessFile(file, "rw"); //指针的位置 System.out.println(randomAccessFile.getFilePointer()); randomAccessFile.write('赵');//只写了一个字节 System.out.println(randomAccessFile.getFilePointer()); randomAccessFile.write('B'); System.out.println(randomAccessFile.getFilePointer()); int i=0x7ffffff; //用write方法,每次只能写一个字节,如果把i写进去要写4次 randomAccessFile.write(i>>>24);//高8位 randomAccessFile.write(i>>>16); randomAccessFile.write(i>>>8); randomAccessFile.write(i); System.out.println(randomAccessFile.getFilePointer()); //可以直接写一个i randomAccessFile.writeInt(i); System.out.println(randomAccessFile.getFilePointer()); String s="中"; byte[] bytes=s.getBytes("gbk"); randomAccessFile.write(bytes); System.out.println(randomAccessFile.length()); System.out.println(randomAccessFile.getFilePointer()); //读文件,必须把指针移到头部 randomAccessFile.seek(0); //一次性读取,把文件中的内容都读到字节数组中 byte[] bs=new byte[(int)randomAccessFile.length()]; randomAccessFile.read(bs); System.out.println(Arrays.toString(bs)); String ss=new String(bs); System.out.println(ss); randomAccessFile.close(); } }
// Integer.toHexString(b&0xFF)把byte字节数组转换成十六进制。