欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Java中IO流 RandomAccessFile类实例详解

程序员文章站 2024-02-20 18:31:04
java中io流 randomaccessfile类实例详解 randomaccessfile java提供的对文件内容的访问,既可以读文件,也可以写文件。...

java中io流 randomaccessfile类实例详解

randomaccessfile

  1. java提供的对文件内容的访问,既可以读文件,也可以写文件。
  2. 支持随机访问文件,可以访问文件的任意位置。
  3. java文件模型,在硬盘上的文件是byte byte byte存储的,是数据的集合
  4. 打开文件,有两种模式,“rw”读写、“r”只读;randomaccessfile raf = new randomaccessfile(file, "rw");,文件指针,打开文件时指针在开头 point = 0;
  5. 写方法, raf.write()-->只写一个字节(后八位),同时指针指向下一个位置,准备再次写入
  6. 读方法,int b = raf.read()-->读一个字节
  7. 文件读写完成以后一定要关闭(oracle官方说明)

 rafdemo.java

package com.test.io;

import java.io.file;
import java.io.ioexception;
import java.io.randomaccessfile;
import java.util.arrays;

public class rafdemo {

  public static void main(string[] args) throws ioexception {
    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());
    
    raf.write('a');//一个char型占两个字节,但是write一次只写入一个字节(a字符的后八位)
    system.out.println(raf.getfilepointer());
    raf.write('b');
    
    int i = 0x7fffffff;
    raf.write(i >>> 24);//写入i的高八位
    raf.write(i >>> 16);
    raf.write(i >> 8);
    raf.write(i);
    system.out.println(raf.getfilepointer());
    //直接写入一个int
    raf.writeint(i);
    
    string s = "你";
    byte[] b = s.getbytes("utf8");
    raf.write(b);
    system.out.println(raf.length());
    
    //读文件,必须把指针移到头部
    raf.seek(0);
    //一次性读取,把文件中的内容都读到字节数组中
    byte[] buf = new byte[(int) raf.length()];
    raf.read(buf);
    system.out.println(arrays.tostring(buf));
    for (byte c : buf) {
      system.out.print(integer.tohexstring(c & 0xff) + " ");
    }
    //关闭文件
    raf.close();
  }

}

  执行结果:

0
1
6
13
[65, 66, 127, -1, -1, -1, 127, -1, -1, -1, -28, -67, -96]
41 42 7f ff ff ff 7f ff ff ff e4 bd a0 

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!