首页 > 代码库 > Java IO流 序列三:RandomAccessFile类

Java IO流 序列三:RandomAccessFile类

 

3. RandomAccessFile

3.1 RandomAccessFile类简介

  •        1. Java提供的对文件内容的访问,既可以读文件,也可以写文件

  •        2. 可以随机访问文件,可以访问文件的任意位置

  •        3. 读写方式:rw(可读写) r(只读)

          例:RandomAccessFile raf = new RandomAccessFile(file,"rw")

  •        4. 由于是随机访问,该类提供了一个指针,默认打开文件的时候指正文件在开头 pointer = 0

  •        5. 写方法

            raf.write(int) -->只写一个字节(8),同时,指针指向下一个位置,准备再次写入

  •        6. 读方法

            int b = raf.read() -->读一个字节

  •        7. 文件读写完成一定要关闭

 

 

3.2 示例

public static void main(String[] args) throws Exception {

         // 创建目录

         File demo = new File("Demo");//未指定绝对路径,默认是本项目下

         if(!demo.exists()){

              demo.mkdir();

         }

         // 创建文件

         File file = new File(demo,"raf.dat");//demo目录下创建raf.dat文件

         if(!file.exists()){

              file.createNewFile();

         }

        

         RandomAccessFile raf = new RandomAccessFile(file, "rw");

         // 指针位置

         System.out.println("起始指针位置:" + raf.getFilePointer()); // 0

        

         // 写操作

         raf.write(‘A‘); //只写了一个字节

         System.out.println("写入一次后的指针位置:" + raf.getFilePointer()); // 1

         raf.write(‘B‘);

         System.out.println("写入两次后的指针位置:" + raf.getFilePointer()); // 2

        

         // 最大整数

         int i = 0x7fffffff;

         // write方法每次只能写入一个字节,如果要把i写进去就得写4

         raf.writeInt(i >>> 24); //8

         raf.writeInt(i >>> 16); //8

         raf.writeInt(i >>> 8);

         raf.writeInt(i); //最后8

         System.out.println("指针位置:" + raf.getFilePointer());  // 18

        

         // 写入中文

         String s = "";

         byte[] bytes = s.getBytes("utf8");

         raf.write(bytes);

         System.out.println("指针位置:" + raf.getFilePointer());   // 21  

        

         // 文件长度

         System.out.println(raf.length());

        

         // 读文件. 必须把指针移到头部

         raf.seek(0);

        

         // 一次性读取,把文件中的内容全部读取到字节数组中

         byte[] buf = new byte[(int)raf.length()];

         raf.read(buf);

         System.out.println(Arrays.toString(buf));

        

         raf.close();

     }

 

Java IO流 序列三:RandomAccessFile类