zoukankan      html  css  js  c++  java
  • Java: RandomAccessFile

      RandeomAccessFile虽然是java.io中的成员,但该类只继承了Object类,实现了DataOut, DataIn, Closeable等接口.此类的实例支持对文件的随机访问和读取.随机访问文件的行为类似存储在文件系统中的一个大型byte数组.存在指向该隐含数组的光标或者索引,称为文件指针. 输入操作从文件指针开始读取字节,并随着对字节的读取而前移文件指针.如果随机访问文件以读取/写入的模式创建,则输出操作也可用;输出操作从文件指针开始写入字节,并随着对字节的写入而迁移此文件指针.写入隐含数组的当前末尾之后的输出操作导致该数组扩展.该文件指针可以通过getFilePointer方法读取,并通过seek方法设置.

      通过该类的构造函数可以看出,该类只能操作文件,而且操作文件还有模式.    r  rw rwd rws

      如果模式为只读r,不会创建文件,会去读取一个以存在的文件,如果该文件不存在则会出现异常;

      如果模式为rw,该对象的构造函数要操作的文件不存在,则自动创建,如果存在,则不会覆盖.

      seek方法可以设置文件指针的位置;

      skipBytes方法可以跳过指定字节的位置,但该方法只能往前跳,不能往后跳.所以使用没有seek方便.

     1 package Day20;
     2 import java.io.*;
     3 
     4 public class RandomAccessFileDemo {
     5 
     6     public static void main(String[] args)throws IOException {
     7         //writeFile();
     8         readFile();
     9 
    10     }
    11     
    12     public static void writeFile()throws IOException{
    13         //File file = new File("a.bat");
    14         RandomAccessFile raf = new RandomAccessFile("a.txt","rw");
    15         
    16         raf.write("张三".getBytes());
    17         raf.writeInt(97);
    18         raf.write("李四".getBytes());
    19         raf.writeInt(98);
    20         raf.write("王五".getBytes());
    21         raf.writeInt(99);
    22         
    23         raf.close();
    24     }
    25     
    26     public static void readFile()throws IOException{
    27         RandomAccessFile raf = new RandomAccessFile("a.txt","r");
    28         for(int x=0;x<3;x++)
    29         {
    30             raf.seek(x*8);
    31             byte[] buf = new byte[4];
    32             raf.read(buf);
    33             String name = new String(buf);
    34             int age = raf.readInt();
    35             System.out.println(name+":"+age);
    36         }
    37 //        byte[] buf = new byte[4];
    38 //        raf.read(buf);
    39 //        
    40 //        String name = new String(buf);//取前四个字节"张三"
    41 //        int age = raf.readInt();//取"张三"后面的97
    42 //        System.out.println(name+":"+age);
    43         raf.close();
    44     }
    45 
    46 }
  • 相关阅读:
    Cooperate with Myself
    A brief introduction of myself
    计算1+11+111+1111+........
    Jav实现F(n)=F(n-1)+F(n-2)+.....+F(1)+1
    查找二维数组中是否有符合的目标值
    排序算法
    时间复杂度
    Java代码实现单例模式
    查找一个字符串中重复出现字符的个数
    null,“”,empty的区别
  • 原文地址:https://www.cnblogs.com/siyingcheng/p/4445773.html
Copyright © 2011-2022 走看看