需求:键盘录入5个学生的成绩(姓名,语文成绩,数学成绩,英语成成绩)。要求按照成绩总分从高到低(总分相同,按名字字母排序)写入文本文件。
格式:姓名,语文成绩,数学成绩,英语成绩 举例:林青霞,100,100,100。
package treeset_txt;
import java.io.*;
import java.util.Comparator;
import java.util.Scanner;
import java.util.TreeSet;
//需求:键盘录入5个学生的成绩(姓名,语文成绩,数学成绩,英语成成绩)。要求按照成绩总分从高到低写入文本文件
//格式:姓名,语文成绩,数学成绩,英语成绩 举例:林青霞,100,100,100
public class TreeSetToFileDemo {
public static void main(String[] args) throws IOException {
//创建TreeSet集合,通过比较器进行排序
TreeSet<Student> ts = new TreeSet<>(new Comparator<Student>() {
@Override
public int compare(Student s1, Student s2) {
//成绩总分从高到低
int num = s2.getSum() - s1.getSum();
//次要条件
int num2 = num == 0 ? s1.getName().compareTo(s2.getName()) : num;
return num2;
}
});
//键盘录入学生数据
for (int i = 0; i < 5; i++) {
Scanner sc = new Scanner(System.in);
System.out.println("请录入第" + (i+1) + "个学生的数据");
System.out.println("姓名:");
String name = sc.nextLine();
System.out.println("语文成绩:");
int chinese = sc.nextInt();
System.out.println("数学成绩:");
int math = sc.nextInt();
System.out.println("英语成绩:");
int english = sc.nextInt();
//创建学生对象,把键盘录入的数据对应的值给学生对象的成员变量
Student s = new Student();
s.setName(name);
s.setChinese(chinese);
s.setMath(math);
s.setEnglish(english);
//把学生对象添加到集合中
ts.add(s);
}
//创建字符流输出对象
BufferedWriter bw = new BufferedWriter(new FileWriter("L:\\Java\\CharStream\\TreeSet.txt"));
//遍历集合得到每一个学生对象
for (Student s : ts) {
//把学生对象的数据拼接成指定格式的字符串
StringBuilder sb = new StringBuilder();
sb.append(s.getName()).append(",").append(s.getChinese()).append(",").append(s.getMath()).append(",").append(s.getEnglish());
//调用字符缓冲流对象的方法写数据
bw.write(sb.toString());
bw.newLine();
bw.flush();
}
//释放资源
bw.close();
}
}
运行过程:
写入结果: