当前案例用于实现数据持久化
学生信息添加到文件中 - 要求封装一个方法来实现
需求分析:
1.键盘录入三个学生的信息(学号,姓名,年龄,居住地)存入到集合中,要求学生的学号不能重复
- 2.编辑集合把每一个学生的信息存入到文件种 - student.txt
- 3.把每一个学生的信息作为一行数据,每行数据都是:学号、姓名、年龄、居住地
步骤:
1.定义一个学生类
- 2.创建集合对象
- 3.写方法实现键盘录入,并且把学生信息作为元素保存到集合种
- 4.创建缓冲输出流
- 5.遍历集合的同时,按照一定的格式把学生的信息保存到文件种 - 举例:1001.蔡徐坤.20.武汉
- 6.释放资源
创建一个学生实体类,要求有无参以及有参构造函数
package Test11_Demo.Demo03;/*@create 2020--11--26--9:31*//*** 学生的实体类*/public class Student {//属性private String id;private String name;private String age;private String address;public Student(){}public Student(String id, String name , String age, String address){this.id = id;this.name = name;this.age = age;this.address = address;}public String getId() {return id;}public void setId(String id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getAge() {return age;}public void setAge(String age) {this.age = age;}public String getAddress() {return address;}public void setAddress(String address) {this.address = address;}}
实现数据的输入及存储
package Test11_Demo.Demo03;/*@create 2020--11--27--10:58*/import java.io.BufferedWriter;import java.io.FileWriter;import java.io.IOException;import java.util.ArrayList;import java.util.Scanner;public class ArrayListToFileDemo {public static void main(String[] args) throws IOException {//创建集合ArrayList<Student> array = new ArrayList<>();//封装一个方法 - 直接调用addStudent(array);addStudent(array);addStudent(array);//写出到文件BufferedWriter bw = new BufferedWriter(new FileWriter("Student.txt")); //自动生成//遍历集合的同时,按照一定的格式把学生的信息保存到文件中for (int i = 0; i < array.size(); i++) {//获取到集合中的每一个学生对象Student s = array.get(i);//利用StringBuilder实现 - 可变长度的字符串有追加的方法 - appendStringBuilder sb = new StringBuilder();sb.append(s.getId()).append("、");sb.append(s.getName()).append("、");sb.append(s.getAge()).append("、");sb.append(s.getAddress());//写出到文件bw.write(sb.toString()); //将可追加的字符串转换为字符串bw.newLine(); //换行//刷新缓存区bw.flush();}//释放资源bw.close();}//封装一个方法添加学生 - 为了封装的彻底性直接使用私有方法 - 因为这个方法就在本类使用private static void addStudent(ArrayList<Student> array){Scanner sc = new Scanner(System.in);//判断学号是不是重复String id;while (true) {System.out.println("请输入学号:");id = sc.next();//判断boolean flag = false;for (int i = 0; i <array.size() ; i++) {Student s = array.get(i);//获取学生的学号,与键盘输入的学号进行比较if (s.getId().equals(id)) {flag = true;break; //如果已经存在就跳出}}if (flag) { //trueSystem.out.println("您输入的学号已经存在,请重新输入!");} else {//直接添加break;}}//继续下面的添加操作System.out.println("请输入学生的姓名");String name = sc.next();System.out.println("请输入学生的年龄");String age = sc.next();System.out.println("请输入学生的居住地");String address = sc.next();//封装成一个学生对象 - 直接利用构造函数Student s = new Student(id, name, age, address);//把学生对象保存到集合中array.add(s);System.out.println("添加学生成功!");}}
