使用数据流对Object对象,进行读取与写入持久性保存练习

题目:键盘录入3个学生信息(姓名,语文成绩,数学成绩,英语成绩)。要求按照成绩总分从高到低写入文本文件,最后在从文件中把读取数据显示在控制台

  • 格式:姓名,语文成绩,数学成绩,英语成绩
  • 举例:林青霞,98,99,100
import java.io.*;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.Scanner;
public class Student {
    private String name;
    private double chinese;
    private double math;
    private double english;
    private double sum = 0;//计算三门科目的总分
    public double getSum() {
        return sum;
    }
    public void setSum(double sum) {
        this.sum = sum;
    }
    @Override
    public String toString() {
        return name + "," + chinese + ", " + math + "," + english;
    }
    public Student(String name, double chinese, double math, double english) {
        this.name = name;
        this.chinese = chinese;
        this.math = math;
        this.english = english;
        this.sum = getChinese() + getMath() + getEnglish();//直接在构造器当中进行累加
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public double getChinese() {
        return chinese;
    }
    public void setChinese(double chinese) {
        this.chinese = chinese;
    }
    public double getMath() {
        return math;
    }
    public void setMath(double math) {
        this.math = math;
    }
    public double getEnglish() {
        return english;
    }
    public void setEnglish(double english) {
        this.english = english;
    }
    public Student() {
    }
    public static void main(String[] args) throws IOException {
        Scanner input = new Scanner(System.in);
        ArrayList<Student> stuList = new ArrayList<>();//学生集合
        File file = new File("src/main/java/zhao/stu.txt");//txt文件的初始化储存位置
        FileReader fr = new FileReader(file);
        BufferedReader br = new BufferedReader(fr);
        FileWriter fw = new FileWriter(file);
        BufferedWriter bw = new BufferedWriter(fw);
        String name;
        double chinese, math, english;
        for (int i = 0; i < 3; i++) {
            System.out.println("请录入第" + (i + 1) + "个学生信息:");
            System.out.println("姓名:");
            name = input.next();
            System.out.println("语文成绩:");
            chinese = input.nextDouble();
            System.out.println("数学成绩:");
            math = input.nextDouble();
            System.out.println("英语成绩:");
            english = input.nextDouble();
            //将控制台接收到的学生对象添加进stuList列表当中
            stuList.add(new Student(name, chinese, math, english));
        }
        //调用Stream流当中的sort方法,将总分作为参数进行排序,由大到小的顺序进行排序
        stuList.stream().sorted((o1, o2) -> Double.compare(o2.getSum(), o1.getSum()));
        Iterator<Student> iterator = stuList.iterator();
        while (iterator.hasNext()) {
            Student student = iterator.next();
            //每次添加完一个学生对象之后,进性换行
            bw.write(student.toString() + "\n");
        }
        bw.flush();//全部数据添加完成之后,更新数据流
        System.out.println("数据写入文件完毕");
        System.out.println("文件中的数据展示如下:");
        System.out.println("姓名,语文成绩,数学成绩,英语成绩");
        String line;
        while ((line = br.readLine()) != null) {//每次读取一行,直到读到的是空行跳出该循环
            System.out.println(line);
        }
        br.close();//关闭流,闭合原则
        bw.close();;
    }
}
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

火飞鹰

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值