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);
    }
}
Java 读取二进制文件并解析成对象:使用 RandomAccessFile 和 异常处理

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

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