RandomAccessFile操作文件的例子

/**
 * 往文件中依次写入3名员工的信息,
 * 每位员工有姓名和员工两个字段 然后按照
 * 第二名,第一名,第三名的先后顺序读取员工信息
 */
import java.io.File;
import java.io.RandomAccessFile;
public class RandomAccessFileTest {
 public static void main(String[] args) throws Exception {
  Employee e1 = new Employee(23, "张三");
  Employee e2 = new Employee(24, "lisi");
  Employee e3 = new Employee(25, "王五");
  File file = new File("employee.txt");
  if(!file.exists()){
   file.createNewFile();
  }
  // 一个中文占两个字节 一个英文字母占一个字节
  // 整形 占的字节数目 跟cpu位长有关  32位的占4个字节
  RandomAccessFile randomAccessFile = new RandomAccessFile(file, "rw");
  randomAccessFile.writeChars(e1.getName());
  randomAccessFile.writeInt(e1.getAge());
  randomAccessFile.writeChars(e2.getName());
  randomAccessFile.writeInt(e2.getAge());
  randomAccessFile.writeChars(e3.getName());
  randomAccessFile.writeInt(e3.getAge());
  randomAccessFile.close();
  
  RandomAccessFile raf2 = new RandomAccessFile(file, "r");
  raf2.skipBytes(Employee.LEN*2 + 4);
  String strName2 = "";
  for(int i=0;i<Employee.LEN;i++){
   strName2 = strName2 + raf2.readChar();
  }
  int age2 = raf2.readInt();
  System.out.println("strName2 = " + strName2.trim());
  System.out.println("age2 = " + age2);
  
  raf2.seek(0);
  String strName1 = "";
  for(int i=0;i<Employee.LEN;i++){
   strName1 = strName1 + raf2.readChar();
  }
  int age1 = raf2.readInt();
  System.out.println("strName1 = " + strName1.trim());
  System.out.println("age1 = " + age1);
  
  
  raf2.skipBytes(Employee.LEN*2 + 4);
  String strName3 = "";
  for(int i=0;i<Employee.LEN;i++){
   strName3 = strName3 + raf2.readChar();
  }
  int age3 = raf2.readInt();
  System.out.println("strName3 = " + strName3.trim());
  System.out.println("age3 = " + age3);
 }
}

class Employee {
  //年龄
  public int age;
  //姓名
  public String name;
  //姓名的长度
  public static final int LEN = 8;
  
  public Employee(int age, String name) {
   this.age = age;

 //对name字符长度的一个处理
   if(name.length() > LEN){
    name = name.substring(0, LEN);
   }else{
    while(name.length() < LEN){
     name = name + "/u0000";
    }
   }
   this.name = name;
  }
  public int getAge() {
   return age;
  }

  public String getName() {
   return name;
  }

 }

RandomAccessFile类对象可以从任意位置来操作文件,此源码参考了传智播客张孝祥老师的视频,如果有错误,可能是本人失误,敬请原谅,本人qq是262448350,愿交天下爱好编程的朋友,谢谢。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值