JAVA编程课堂笔记(64)
RandomAccessFile 操作文件内容, 访问文件任意位置
16进制:41 对应: 0100 0001 是一个字节(byte)
一个MP3歌曲大约 5M byte, 一个5M个Byte数据组成的有序集合
一个文件8G个Byte
文件是byte by byte 是数据有序集合
基本的文件访问, 基于一个byte一个byte的读写文件
byte数据是文件的基本组成单位, 是最小的原子单位.
1)Java 文件模型, 文件是byte by byte 是数据集合
data : 41 42 00 00 00 ff d6 d0 ...
index : 0 1 2 3 4 5 6 7 8
pointer: ^
2) 打开文件, 有两种模式 "rw", "r"
RandomAccessFile raf = new RandomAccessFile(file, "rw");
打开文件时候默认文件指针在开头 pointer=0
3)写入方法: raf.write(int) 将整数的"低八位"写入到文件中, 指针
自动移动到下一个位置, 准备再次写入
* 文件名的扩展名要明确指定, 没有默认扩展名现象!
任务: A 在demo文件夹中创建raf.dat
B 打开这个文件
C 写入 'A' 和 'B'
D 写入整数 255 占用4个byte
E 写入GBK 编码的 '中', d6d0
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()); //0
raf.write('A');// 0041 -> 00000041 -> 41
System.out.println(raf.getFilePointer());//1
raf.write('B');
int i = 0x7fffffff;// 7f ff ff ff
//raf.write(i>>>24);// i>>>24 00 00 00 7f
//raf.write(i>>>16);// i>>>16 00 00 7f ff
//raf.write(i>>>8);// i>>>8 00 7f ff ff
//raf.write(i);// i 7f ff ff ff
raf.writeInt(i);
String s = "中";//4e2d
byte[] gbk = s.getBytes("gbk");
//gbk = {d6, d0}
raf.write(gbk);
raf.close();