读取文件排序之后输出文件

该博客演示了如何使用Java读取两个文本文件中的员工记录,将记录合并并按工号升序排序,然后将排序结果输出到新的文本文件。程序实现了Staff类,包含工号、姓名和年龄字段,并实现了Comparable接口进行排序。FileO类提供了读取和写入TXT文件的静态方法。
摘要由CSDN通过智能技术生成

读入A.txt和B.txt两个文本文件中的员工记录,把两个文件中的员工记录合并后按工号升序排序,将排序结果输出到一个文本文件中。规定输入、输出文件中都是每个记录一行,每个记录中有3个字段(工号、姓名、年龄),假设文件不大,所有数据读入后可以同时存放在内存中。
Staff.java

/**
 * @ClassName: Staff
 * @Author: l1957
 * @Date: 2021/12/27 22:57
 * @Description: TODO
 */
public class Staff implements Comparable<Staff>{
    private int id;
    private String name;
    private int age;

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "Staff{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", age=" + age +
                '}';
    }

    @Override
    public int compareTo(Staff staff) {           //重写Comparable接口的compareTo方法,
        return this.age - staff.getAge();// 根据年龄升序排列,降序修改相减顺序即可
    }
}

FileO.java

/**
 * @ClassName: test
 * @Author: l1957
 * @Date: 2021/12/27 21:54
 * @Description: TODO
 */

import java.io.*;
import java.util.Collections;
import java.util.LinkedList;
import java.util.List;

/**
 *
 */
public class FileO {
    /**
     * 功能:Java读取txt文件的内容
     * 步骤:1:先获得文件句柄
     * 2:获得文件句柄当做是输入一个字节码流,需要对这个输入流进行读取
     * 3:读取到输入流后,需要读取生成字节流
     * 4:一行一行的输出。readline()。
     * 备注:需要考虑的是异常情况
     * @param filePath
     */
    public static List<Staff> readTxtFile(String filePath){
        List<Staff> staffList=new LinkedList<>();
        try {
            String encoding="GBK";
            File file=new File(filePath);
            if(file.isFile() && file.exists()){ //判断文件是否存在
                InputStreamReader read = new InputStreamReader(
                        new FileInputStream(file),encoding);//考虑到编码格式
                BufferedReader bufferedReader = new BufferedReader(read);
                String lineTxt = null;
                bufferedReader.readLine();
                while((lineTxt = bufferedReader.readLine()) != null){
                    String[] a=lineTxt.split("\t");
                    Staff staff=new Staff();
                    staff.setId(Integer.parseInt(a[0]));
                    staff.setName(a[1]);
                    staff.setAge(Integer.parseInt(a[2]));
                    staffList.add(staff);
                }
                read.close();
            }else{
                System.out.println("找不到指定的文件");
            }
        } catch (Exception e) {
            System.out.println("读取文件内容出错");
            e.printStackTrace();
        }
        return staffList;
    }
public static void writeTxt(String name,List<Staff> list){
    try {
        FileWriter fileWriter=new FileWriter(name+".txt");
        fileWriter.write("id 姓名 年龄\n");
        for(Staff staff:list){
            fileWriter.write(staff.getId()+" "+staff.getName()+" "+staff.getAge()+"\n");
        }
        fileWriter.close();

    } catch (Exception e) {
        e.printStackTrace();
    }
}
    public static void main(String argv[]){
        String filePatha = "src/a.txt";
        String filePathb = "src/b.txt";
        //读取文件
        List<Staff> lista=FileO.readTxtFile(filePatha);
        List<Staff> listb=FileO.readTxtFile(filePathb);
        lista.addAll(listb);
        Collections.sort(lista);
        //输出文件
        writeTxt("src/out",lista);
        for(Staff staff:lista){
            System.out.println(staff.toString());
        }

    }



}

a.txt

工号	姓名	年龄
118
220
336
445

b.txt

工号	姓名	年龄
112
231
334

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值