将文件中的学生信息按照年龄升序排序后重新写回原文件;
要求:
1:使用字符缓冲流完成;
2:每次循环读取一行信息
3:写数据的时候换行使用newLine方法;
效果:
1.txt文件排序前:
1.txt文件排序后:
示例代码
package com.heiam.HomeWork;
public class Student {
private String name;
private int age;
public Student() {
}
public Student(String name, int age) {
this.name = name;
this.age = age;
}
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;
}
public String toString() {
return name +","+age;
}
}
package com.heiam.HomeWork;
import java.io.*;
import java.util.TreeSet;
public class Test2 {
public static void main(String[] args) throws IOException {
//创建文件对象和字符缓冲流对象,准备读数据
File f = new File("test.txt");
BufferedReader br = new BufferedReader(new FileReader(f));
//准备TreeSet集合,用于保存读到的学生对象并排序
TreeSet<Student> set = new TreeSet<>((s1, s2)->s1.getAge()-s2.getAge()==0?s1.getName().compareTo(s2.getName()):s1.getAge()-s2.getAge());
String s = null;
while ((s=br.readLine())!=null){
String[] split1 = s.split(",");
//把按照切分出来的数组的第1个值作为name,第二个值作为age创建学生对象,并按照年龄排序
Student stu = new Student(split1[0],Integer.parseInt(split1[1]));
set.add(stu);
}
//创建输出流,并把set集合中的学生信息重新写入1.txt文件中;(重写Student的toString方法了)
BufferedWriter bw = new BufferedWriter(new FileWriter("test.txt"));
for (Student stu : set) {
bw.write(stu.toString());
bw.newLine();//换行,不用考虑系统问题,比写\r\n更通用
}
br.close();
bw.close();
System.out.println("排序已完成");
}
}