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');//只写了一个字节,写进A的后8位
System.out.println(raf.getFilePointer());
raf.write('B');
System.out.println(raf.getFilePointer());
int i = 0x7ffffff;
//用write方法每次只能写一个字节,如果要把i写进去就得写4次
raf.write(i >>> 24);//写进i的高八位
raf.write(i >>> 16);
raf.write(i >>> 8);
raf.write(i);
System.out.println(raf.getFilePointer());
//可以直接写进一个int
//raf.writeInt(i);writeInt底层做的还是上面write所示代码的事情
String s = "中";
byte[] gbk = s.getBytes("gbk");
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));
//16进制方式输出
for (byte b : buf) {
System.out.print(Integer.toHexString(b));
}
一开始是0,A、B之后是2,
到这里写进 i
raf.write(i >>> 24);//写进i的高八位
raf.write(i >>> 16);
raf.write(i >>> 8);
raf.write(i);
System.out.println(raf.getFilePointer());
输出 6 (2+4)
//可以直接写进一个int
//raf.writeInt(i);writeInt底层做的还是上面write所示代码的事情
又写一次 i
输出 10 (6+4)
String s = "中";
byte[] gbk = s.getBytes("gbk");
raf.write(gbk);
System.out.println(raf.getFilePointer());
System.out.println(raf.length());
一个汉字占两个字节,此时字节长度是 12 (10+2)
你文件里面之前有你内容,你删除文件重新运行一遍就可以了。