继上次简单的学员管理系统( https://blog.csdn.net/qq_38353993/article/details/82594809 ),之前简单的学员管理系统,是将学员信息存储在一个集合中,在系统停止运行后,对学员信息的增删改查也会丢失,本次是对学员管理系统的第一次强化版,将学员的信息写入文件IO流(IO具体基础内容: https://blog.csdn.net/qq_38353993/article/details/82762657 ),即使系统不再运行,那么之前修改过的信息依然存在。
下面将写出具体修改,最后将放出修改过的具体代码以供参考:
简单版的信息初始化不再使用,将初始化的内容写入到一个文件中,方法在使用学员集合时只需要调用一个将文件内容读取并返回一个学员集合的方法即可;
具体读取文件的方法:
//从文件中读取出Student集合并返回
private static ArrayList<Student> readAll() {
ArrayList<Student> stuList = new ArrayList<>();
//学员的初始内容写在项目下的 data.txt 文件中
//使用高效输入流读取文件中的信息
try (BufferedReader br = new BufferedReader(new FileReader("data.txt"))) {
String s = null;
while ((s = br.readLine())!=null){
String[] strings = s.split(",");//文件中的每个学员的具体信息是以“,”号隔开的
Student student = new Student();
student.setStuNo(Integer.parseInt(strings[0]));//学号
student.setName(strings[1]);//姓名
student.setSex(strings[2]);//性别
student.setAge(Integer.parseInt(strings[3]));//年龄
stuList.add(student);//将读取到学员信息添加到集合中
}
return stuList;//返回该集合
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return null;//当文件内容为空时返回null
}
在添加、修改、删除方法中,都对学员集合做出了修改,那就需要更新文件中的学生信息,所以就需要一个将修改过的学员集合写入到文件中的方法:
//将修改过的集合写入到文件中
public static void writeAll(ArrayList<Student> stuList){
try (BufferedWriter out = new BufferedWriter(new FileWriter("data.txt"))) {
//使用覆盖写,将旧的文件信息以新的进行覆盖
for (Student s:stuList) {
out.write(s.getStuNo()+","+s.getName()+","+s.getSex()+","+s.getAge());
out.newLine();//相当于回车,一个学员信息占一行
}
} catch (IOException e) {
e.printStackTrace();
}
}
完整代码
Student类:
public class Student {
private int stuNo;
private String name;
private String sex;
private int age;
public Student() {
}
public Student(int stuNo, String name, String sex, int