import java.io.*;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

public class ReadEmpData {
    public static void main(String[] args) {
        List<Emp> empList = new ArrayList<>();
        RandomAccessFile raf = null;
        try {
            raf = new RandomAccessFile("emp.dat", "r");
            byte[] nameBytes = new byte[32];
            byte[] genderBytes = new byte[10];
            for (int i = 0; i < 10; i++) {
                raf.read(nameBytes);
                String name = new String(nameBytes, StandardCharsets.UTF_8).trim();
                short age = raf.readShort();
                raf.read(genderBytes);
                String gender = new String(genderBytes, StandardCharsets.UTF_8).trim();
                int salary = raf.readInt();
                long hiredate = raf.readLong();
                Emp emp = new Emp(name, age, gender, salary, hiredate);
                empList.add(emp);
            }
            Collections.sort(empList);
            for (Emp emp : empList) {
                System.out.println(emp);
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (raf != null) {
                try {
                    raf.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}

class Emp implements Comparable<Emp> {
    private String name;
    private short age;
    private String gender;
    private int salary;
    private long hiredate;

    public Emp(String name, short age, String gender, int salary, long hiredate) {
        this.name = name;
        this.age = age;
        this.gender = gender;
        this.salary = salary;
        this.hiredate = hiredate;
    }

    public String getName() {
        return name;
    }

    public short getAge() {
        return age;
    }

    public String getGender() {
        return gender;
    }

    public int getSalary() {
        return salary;
    }

    public long getHiredate() {
        return hiredate;
    }

    @Override
    public String toString() {
        return "Emp{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", gender='" + gender + '\'' +
                ", salary=" + salary +
                ", hiredate=" + hiredate +
                '}';
    }

    @Override
    public int compareTo(Emp o) {
        return Long.compare(this.hiredate, o.hiredate);
    }
}
``
使用异常捕获机制完成下述读取操作并在finally中有关闭RandomAccessFile操作。将empdat文件中所有员工解析出来并创建为若干Emp实例存入一个集合然后按照员工入职从晚到早的顺序依次输出员工信息。List该文件560字节每56个字节为一个员工的信息。其中 name为字符串长度为32个字节编码为UTF-8 age为short长度为2个字节 gender为字符串长度为10个字节编码为

原文地址: https://www.cveoy.top/t/topic/heYt 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录