实战案例一:
已知⼀个⽂本内容如下:
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岁
每⼀⾏是数据为⼀个⼈的信息,但是顺序是不固定的。
-
在桌⾯上创建⼀个GBK⽂件,将内容写到这个⽂件中。(可以使⽤IDEA创建GBK⽂件)
-
将桌⾯创建的⽂件⽤代码复制到项⽬下的 file\source 路径下。
-
读取这个⽂本中的数据,将每⼀⾏的数据封装到⼀个 Person 对象中,并存⼊⼀个 List 集合
-
删除集合中所有的未成年的数据
-
计算所有⼈的平均年龄、最⼤年龄、最⼩年龄
-
将集合中的数据按照年龄进⾏降序排序,若年龄相同,按照身⾼降序排序
-
查询集合中所有的年龄在[20, 25]范围内,体重在[60, 80]范围内的数据,按照身⾼降序排列,截取第4名到第8名。
-
将集合中的数据序列化到本地
-
将本地序列化的⽂件反序列化,得到集合,并遍历输出⾥⾯的内容
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