当前案例用于实现数据持久化
学生信息添加到文件中 - 要求封装一个方法来实现
需求分析:
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实现 - 可变长度的字符串有追加的方法 - append
StringBuilder 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) { //true
System.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("添加学生成功!");
}
}