IO流高级案例

实战案例一:

已知⼀个⽂本内容如下:

name:xiaoming,age:10岁,gender:male,height:172cm,weight:70kg
age:20岁,height:177cm,name:xiaobai,weight:80kg,gender:male
gender:female,height:176cm,weight:66kg,name:xiaolv,age:21岁

每⼀⾏是数据为⼀个⼈的信息,但是顺序是不固定的。

  1. 在桌⾯上创建⼀个GBK⽂件,将内容写到这个⽂件中。(可以使⽤IDEA创建GBK⽂件)

  2. 将桌⾯创建的⽂件⽤代码复制到项⽬下的 file\source 路径下。

  3. 读取这个⽂本中的数据,将每⼀⾏的数据封装到⼀个 Person 对象中,并存⼊⼀个 List 集合

  4. 删除集合中所有的未成年的数据

  5. 计算所有⼈的平均年龄、最⼤年龄、最⼩年龄

  6. 将集合中的数据按照年龄进⾏降序排序,若年龄相同,按照身⾼降序排序

  7. 查询集合中所有的年龄在[20, 25]范围内,体重在[60, 80]范围内的数据,按照身⾼降序排列,截取第4名到第8名。

  8. 将集合中的数据序列化到本地

  9. 将本地序列化的⽂件反序列化,得到集合,并遍历输出⾥⾯的内容

1.先创建一个Person对象(可以写为静态内部类)

class Person implements Serializable {
   
    private enum Gender {
   
        male, female
    }

    private String name;
    private int age;
    private Gender gender;
    private int height;
    private int weight;

    /**
     * 通过⽂本中的⼀⾏数据,实例化⼀个Person对象
     *
     * @param line ⽂本中的⼀⾏数据
     */
    public Person(String line) {
   
        // 1、实例化⼀个Map集合,存储每⼀个属性的值(键值对)
        Map<String, String> properties = new HashMap<>();

        // 2、切割字符串
        String[] parts = line.split(",");

        // 3、遍历这个数组
        for (String part : parts) {
   
            String[] tmp = part.split(":");
            properties.put(tmp[0], tmp[1]);
        }

        // 4、遍历map,给每⼀个属性赋值
        properties.forEach((k, v) -> {
   
            switch (k) {
   
                case "name":
                    name = v;
                    break;
                case "age":
                    age = Integer.parseInt(v.replace("岁", ""));
                    break;
                case "gender":
                    gender = v.equalsIgnoreCase("male") ? Gender.male : Gender.female;
                    break;
                case "height":
                    height = Integer.parseInt(v.replace("cm", ""));
                    break;
                case "weight":
                    weight = Integer.parseInt(v.replace("kg", ""));
                    break;
            }
        });
    }

    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 Gender getGender() {
   
        return gender;
    }

    public void setGender(Gender gender) {
   
        this.gender = gender;
    }

    public int getHeight() {
   
        return height;
    }

    public void setHeight(int height) {
   
        this.height = height;
    }

    public int getWeight() {
   
        return weight;
    }

    public void setWeight(int weight) {
   
        this.weight = weight;
    }

    @Override
    public String toString() {
   
        return "Person{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", gender=" + gender +
                ", height=" + height +
                ", weight=" + weight +
                '}';
    }
}

2.将桌⾯创建的⽂件⽤代码复制到项⽬下的 file\source 路径下。

private static void two() {
   
        try (BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(new FileInputStream("C:\\Users\\22150\\Desktop\\data.txt"), "GBK"));
             BufferedWriter bufferedWriter = new 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值