关于IO流与集合综合应用的一个小案例

需求

第01题 对象存储问题

存在这样的学生数据:(Student类)
姓名:张三,年龄: 23,性别:女
姓名:李四,年龄 24,性别:男
姓名:王五,年龄 25,
性别:女

1、将这些数据存储到集合当中(内存存储)
2、将集合数据存储到文件当中(硬盘存储) studentinfo.txt

存储的格式如下:
张三@23@女
李四@24@男
王五@25@女

第02题 对象读取问题

将上一题当中的数据。文本文件 studentinfo.txt 的数据,读取到集合当中。

集合固定为 ArrayList 并且遍历集合。

Student 类当中,需要包含有:name age gender

第03题 对象读取问题

  1. 将第01题,改写一下,数据来自于 键盘录入,再去实现第1题的功能。

  2. 在键盘录入的过程当中,加入 年龄的处理问题。如果年龄 低于0或者高于 200 则出现年龄异常(采用自定义的 AgeException
    完成)

  3. 增加功能,在保存到 文件 studentinfo.txt 的过程当中,增加排序功能。 要求,按照年龄的 从大到小的顺序排列。

学生类 Student.java

public class Student {
    private String name;
    private int age;
    private String sex;

    public Student() {
    }

    public Student(String name, int age, String sex) {
        this.name = name;
        this.age = age;
        this.sex = sex;
    }

    @Override
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", sex='" + sex + '\'' +
                '}';
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) throws AgeException {

        this.age = age;
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

}

年龄异常类 AgeException.java

public class AgeException extends Exception {
    public AgeException() {
    }

    public AgeException(String message) {
        super(message);
    }
}

文件管理类 File.java


import java.io.*;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Scanner;
import java.util.stream.Collectors;
import java.util.stream.Stream;

public class File {
    public static void main(String[] args) throws IOException, AgeException {
       /* Student a=new Student();
        a.setAge(23);
        a.setName("张三");
        a.setSex("女");

        Student b=new Student();
        b.setAge(24);
        b.setName("李四");
        b.setSex("男");

        Student c=new Student();
        c.setAge(25);
        c.setName("王五");
        c.setSex("女");

        //  将学生数据存储到集合当中(内存存储)
        List<Student> studentList = new ArrayList<>();
        Collections.addAll(studentList,c,a,b);*/


        List<Student> studentList = new ArrayList<>();
        Scanner in = new Scanner(System.in);
        boolean flag=true;
        while (flag) {
            System.out.println("请输入学生的姓名");
            String Sname = in.next();

            System.out.println("请输入学生的年龄");
            int Sage = in.nextInt();
            if (Sage < 0 || Sage > 120) {
                throw new AgeException("年龄必须在0-120之间");
            }
            System.out.println("请输入学生的性别");
            String Ssex = in.next();
            studentList.add(new Student(Sname, Sage, Ssex));

            System.out.println("是否继续添加学生 输入1继续添加  输入2结束添加");
            String choice = in.next();
            if("1".equals(choice)){
                flag=true;
            }else {
                flag=false;
                break;
            }

        }


        //  目标文件路径
        String path="C:\\Users\\LENOVO\\IdeaProjects\\untitled1\\fileIO\\dir\\studentinfo.txt";

        //  将集合数据存储到文件当中(硬盘存储)   studentinfo.txt
        BufferedWriter bw = new BufferedWriter(new FileWriter(path));

        //  存储学生信息

            List<Student> students = studentList.stream().sorted((f1, f2) -> Long.compare(f2.getAge(), f1.getAge())).collect(Collectors.toList());

         for (Student student : students) {
            String name = student.getName();
            bw.write(name);
            bw.write("@");
            bw.flush();
            int age = student.getAge();
            String ages=age+"";
            bw.write(ages);
            bw.write("@");
            bw.flush();
            String sex = student.getSex();
            bw.write(sex);
            bw.flush();
            bw.newLine();
            bw.flush();
        }
        bw.close();

        //  将文本文件 studentinfo.txt 的数据,读取到集合当中
        BufferedReader br = new BufferedReader(new FileReader(path));
        ArrayList<Student> studentList2 = new ArrayList<>();

        String line;
        while ((line= br.readLine())!=null){
            String[] student = line.split("@");
            int studentAge = Integer.parseInt(student[1]);

            studentList2.add(new Student(student[0],studentAge,student[2]));


        }
        //  释放资源
        bw.close();

        for (Student student : studentList2) {
            System.out.println(student);
        }


}
}

  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值