操作文件内容, 访问文件任意位置

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
写入方法: 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();

4) 读取文件
int b = raf.read() 从文件中读取一个byte(8 位) 填充到int
的低八位, 高24 位为0, 返回值范围正数: 0~255, 如果返回-1 表示
读取到了文件末尾! 每次读取后自动移动文件指针, 准备下次读取.
任务1: A 只读打开文件, 移动到int 数据位置
B 连续读取4 个byte, 拼接为int (反序列化)
RandomAccessFile raf =
new RandomAccessFile("demo/raf.dat", "r");
int i = 0;
raf.seek(2);//移动到int 位置
i = raf.readInt();
System.out.println(Integer.toHexString(i));
raf.close();
5) 文件读写完成以后一定关闭文件

你可能感兴趣的:(操作文件内容, 访问文件任意位置)