案例:集合到文件(数据排序改进版)
案例:集合到文件(数据排序改进版)
- 定义学生类
- 创建TreeSet集合
- 键盘录入学生数据
- 创建学生对象,把键盘录入的数据对应赋值给学生对象的成员变量
- 把学生对象添加到TreeSet集合
- 创建字符缓冲流输出流
- 遍历学生,得到每一个学生对象
- 把学生对象的数据拼接成指定格式的字符串
- 调用字符缓冲输出流对象的方法写数据
- 释放资源
以图文和代码内容形式讲解
图文:
代码:
package Demo;import java.io.*;import java.util.Comparator;import java.util.Scanner;import java.util.TreeSet;public class Demo { 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; //如果语文成绩后者大于前者,则降序 num=s2.getYw()-s1.getYw();//s2-s1的话降序 //同类可推 数学的 int num2=num==0?s2.getSx()-s1.getSx():num; //同类可推 英语的 int num3=num2==0?s2.getYy()-s1.getYy():num2; return num3; } }); //建立循环,总共执行5次 int i=1; while(i<=5){ Scanner sc = new Scanner(System.in); System.out.println("请输入第"+i+"个人的姓名"); String name = sc.nextLine(); System.out.println("请输入语文成绩"); int yw = sc.nextInt(); System.out.println("请输入数学成绩"); int sx = sc.nextInt(); System.out.println("请输入英语成绩"); int yy = sc.nextInt(); //建立学生类 Student st = new Student(name,yw,sx,yy); //添加到集合 ts.add(st); i++; } //将集合的内容添加到文件中 BufferedWriter bw = new BufferedWriter(new FileWriter("D:\\item\\Hellow\\javasss.txt")); //开始写文件 for (Student x:ts){ StringBuilder sb = new StringBuilder(); //将内容写入同一对象字符串地址中,可以防止浪费资源和效率低下问题 sb.append(x.getName()).append(",").append(x.getYw()).append(",").append(x.getSx()).append(",").append(x.getYy()); bw.write(sb.toString()); bw.newLine(); bw.flush(); } //释放资源 bw.close(); }}
输出的结果