读入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
工号 姓名 年龄
1 李 18
2 王 20
3 马 36
4 钱 45
b.txt
工号 姓名 年龄
1 朱 12
2 孙 31
3 曾 34