当前案例用于实现数据持久化

  • 学生信息添加到文件中 - 要求封装一个方法来实现

  • 需求分析:

  • 1.键盘录入三个学生的信息(学号,姓名,年龄,居住地)存入到集合中,要求学生的学号不能重复

  • 2.编辑集合把每一个学生的信息存入到文件种 - student.txt
  • 3.把每一个学生的信息作为一行数据,每行数据都是:学号、姓名、年龄、居住地
  • 步骤:

  • 1.定义一个学生类

  • 2.创建集合对象
  • 3.写方法实现键盘录入,并且把学生信息作为元素保存到集合种
  • 4.创建缓冲输出流
  • 5.遍历集合的同时,按照一定的格式把学生的信息保存到文件种 - 举例:1001.蔡徐坤.20.武汉
  • 6.释放资源

创建一个学生实体类,要求有无参以及有参构造函数

  1. package Test11_Demo.Demo03;/*
  2. @create 2020--11--26--9:31
  3. */
  4. /**
  5. * 学生的实体类
  6. */
  7. public class Student {
  8. //属性
  9. private String id;
  10. private String name;
  11. private String age;
  12. private String address;
  13. public Student(){
  14. }
  15. public Student(String id, String name , String age, String address){
  16. this.id = id;
  17. this.name = name;
  18. this.age = age;
  19. this.address = address;
  20. }
  21. public String getId() {
  22. return id;
  23. }
  24. public void setId(String id) {
  25. this.id = id;
  26. }
  27. public String getName() {
  28. return name;
  29. }
  30. public void setName(String name) {
  31. this.name = name;
  32. }
  33. public String getAge() {
  34. return age;
  35. }
  36. public void setAge(String age) {
  37. this.age = age;
  38. }
  39. public String getAddress() {
  40. return address;
  41. }
  42. public void setAddress(String address) {
  43. this.address = address;
  44. }
  45. }

实现数据的输入及存储

  1. package Test11_Demo.Demo03;/*
  2. @create 2020--11--27--10:58
  3. */
  4. import java.io.BufferedWriter;
  5. import java.io.FileWriter;
  6. import java.io.IOException;
  7. import java.util.ArrayList;
  8. import java.util.Scanner;
  9. public class ArrayListToFileDemo {
  10. public static void main(String[] args) throws IOException {
  11. //创建集合
  12. ArrayList<Student> array = new ArrayList<>();
  13. //封装一个方法 - 直接调用
  14. addStudent(array);
  15. addStudent(array);
  16. addStudent(array);
  17. //写出到文件
  18. BufferedWriter bw = new BufferedWriter(new FileWriter("Student.txt")); //自动生成
  19. //遍历集合的同时,按照一定的格式把学生的信息保存到文件中
  20. for (int i = 0; i < array.size(); i++) {
  21. //获取到集合中的每一个学生对象
  22. Student s = array.get(i);
  23. //利用StringBuilder实现 - 可变长度的字符串有追加的方法 - append
  24. StringBuilder sb = new StringBuilder();
  25. sb.append(s.getId()).append("、");
  26. sb.append(s.getName()).append("、");
  27. sb.append(s.getAge()).append("、");
  28. sb.append(s.getAddress());
  29. //写出到文件
  30. bw.write(sb.toString()); //将可追加的字符串转换为字符串
  31. bw.newLine(); //换行
  32. //刷新缓存区
  33. bw.flush();
  34. }
  35. //释放资源
  36. bw.close();
  37. }
  38. //封装一个方法添加学生 - 为了封装的彻底性直接使用私有方法 - 因为这个方法就在本类使用
  39. private static void addStudent(ArrayList<Student> array){
  40. Scanner sc = new Scanner(System.in);
  41. //判断学号是不是重复
  42. String id;
  43. while (true) {
  44. System.out.println("请输入学号:");
  45. id = sc.next();
  46. //判断
  47. boolean flag = false;
  48. for (int i = 0; i <array.size() ; i++) {
  49. Student s = array.get(i);
  50. //获取学生的学号,与键盘输入的学号进行比较
  51. if (s.getId().equals(id)) {
  52. flag = true;
  53. break; //如果已经存在就跳出
  54. }
  55. }
  56. if (flag) { //true
  57. System.out.println("您输入的学号已经存在,请重新输入!");
  58. } else {
  59. //直接添加
  60. break;
  61. }
  62. }
  63. //继续下面的添加操作
  64. System.out.println("请输入学生的姓名");
  65. String name = sc.next();
  66. System.out.println("请输入学生的年龄");
  67. String age = sc.next();
  68. System.out.println("请输入学生的居住地");
  69. String address = sc.next();
  70. //封装成一个学生对象 - 直接利用构造函数
  71. Student s = new Student(id, name, age, address);
  72. //把学生对象保存到集合中
  73. array.add(s);
  74. System.out.println("添加学生成功!");
  75. }
  76. }