15、Java入门—Java IO流之RandomAccessFile类的基本操作

来源:互联网 发布:js 提取 网页文本 编辑:程序博客网 时间:2024/05/17 03:18
【RandomAccessFile类】
RandomAccessFile java 提供的对文件内容的访问,既可以读文件,也可以写文件
RandomAccessFile支持随机访问文件,可以访问文件的任意位置


①java文件模型
在硬盘上的文件是 byte byte byte存储的,是数据的集合
②打开文件
有两种模式“rw”(读写)“r”(只读)
RandomAccessFile raf = new RandomAccessFile(file,"rw");
③写方法
raf.write(int) ---> 只写一个字节(后8位),同时指针指向下一个位置
④读方法
int b = raf.read() ----> 读一个字节
⑤文件读写完成以后一定要关闭

否则会有意想不到的错误


File demo = new File("demo");
if(!demo.exists())
demo.mkdir();//创建demo目录
File file = new File(demo,"raf.dat");
if(!file.exists())
file.createNewFile();//在demo目录下,创建raf.dat文件
//打开文件,进行随机读写
RandomAccessFile raf = new RandomAccessFile(file, "rw");
raf.write('A');//只写一个字节,同时指针后移
System.out.println(raf.getFilePointer());//输出:1
raf.write('B');


//若要写入一个整数i则需要写四次
int i=0x7fffffff;
raf.write(i>>>24);//高八位
raf.write(i>>>16);
raf.write(i>>>8);
raf.write(i);//低八位


//也可直接写入一个int
raf.writeInt(i);


//写入汉字
String s="中";
byte[] gbk=s.getBytes("gbk");
raf.write(gbk);
System.out.println(raf.length(0);//输出:12(中文占俩字节)


//读文件时必须把指针移到头部
raf.seek(0);
//一次性读取
byte[] buf= new byte[(int)raf.length()];
raf.read(buf);
System.out.println(Arrays.toString(buf));
//此时打印输出:[65,66,127,-1,-1,-1,127,-1,-1,-1,-42,-48]
//开头的65,66是正确的AB,因为后八位已经能表示AB了


//也可按字符串输出
String s1=new String(buf,"gbk");
System.out.println(s1);//输出:AB?????(因为“中”的前后都有字节,只有定位到中的两个字节,才能读出它)


raf.close();//最后要加上

0 0