这一篇文章主要是介绍对上次写的学生管理系统的升级,因为上次写的系统数据都是保存在一个ArrayList集合之中的,这样的话就会有一个问题:每次程序执行完了之后集合中的数据都会被清空,到下一次再启动程序的时候就完全是一次重新的开始,很显然,这样是不够完善的,需要将多次程序运行时候的数据联系起来。
解决的办法就是使用一个文本文件保存之前我们用ArrayList集合保存的数据,在每次程序开始运行的时候,先去加载一次文本文件中的数据,这样上一次程序运行时保存的数据在这一次也可以使用,同时,在系统的主要功能之中,当有涉及到修改和增加以及删除数据的时候,都去更新一下文本文件中的数据。
之前的系统都是程序和保存在ArrayList集合中的数据进行交互,这一次想要引入文本文件保存数据的话,最简单的办法是使用ArrayList去和文本文件进行交互,这样原来已经存在的东西也不用改多少,只需要增加后面这一部分就好了,所以下面的重点就是说明ArrayList和文本文件之间的转换。
1.从文本文件中将数据读取到集合中
保存在文本文件再的每行数据都是一个Student类的对象,对象的每个属性都使用”,”进行分割。
public static void readData(String fileName, ArrayList<Student> arr)
throws IOException {
BufferedReader br = new BufferedReader(new FileReader(fileName));
String line;
while ((line = br.readLine()) != null) {
String[] strArr = line.split(",");
Student s = new Student();
s.setId(strArr[0]);
s.setName(strArr[1]);
s.setAge(strArr[2]);
s.setAddress(strArr[3]);
arr.add(s);
}
br.close();
}
2.将集合中的数据写入到文本文件中
写入数据的时候也是将ArrayList中的每个对象用约定好的格式写入到文本文件中。
public static void writeData(String fileName, ArrayList<Student> arr)
throws IOException {
BufferedWriter bw = new BufferedWriter(new FileWriter(fileName));
for (int i = 0; i < arr.size(); i++) {
Student s = arr.get(i);
StringBuilder sb = new StringBuilder();
sb.append(s.getId() + "," + s.getName() + "," + s.getAge() + ","
+ s.getAddress());
bw.write(sb.toString());
bw.newLine();
bw.flush();
}
bw.close();
}
3.何时读取文本,何时写入文本
这个就是这次升级最关键的部分了,因为之前的系统大部分功能已经实现了,上面也把ArrayList和文本文件之间的相互转换做好了,现在最关键的一点就是在程序运行的时候何时读取文本中的数据以及何时将数据更新到文本文件中。
何时读取呢?其实只需要读取一次,就是程序最开始运行起来的时候读取一次。
何时更新呢?其实只需要在程序退出之前更新一次就好了,因为程序运行时的数据是会完全保存在ArrayList集合之中的,在程序退出之时将其中的数据写入文本文件就好了,所以可以在case "5":
和default:
之后加一个写入数据的方法就好了,不过我做的时候是在ArrayList有变动的时候就会写入一遍,其实也没有很多地方,增加成功的时候,删除成功的时候,最后就是修改成功的时候,在这几个地方调用一次写入方法就好了。
4.完整程序
完整的程序还是放在GitHub上面了,链接是https://github.com/LauCloud/studentManager