上篇文章:<Java>实现学生信息管理系统,涉及简单IO流
本次我会对上篇文章的一些代码做出改进。
先看改进后的存储代码:
package saveInformation;
/*汤*/
import java.io.*;
import java.util.Arrays;
import Student.Student;
//保存信息
public class saveTools{
private static File file=new File("D://stu.txt");
public static boolean saveInformation(Student[] stu) throws Exception {
BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter(file));
for(int i=0;i<stu.length;i++){
bufferedWriter.write(stu[i].getName()+"/"+stu[i].getNumber()+"/"+stu[i].getAge()+"/"+stu[i].getSex()+"/"+stu[i].getMath()+"/"+stu[i].getEnglish()+"/"+stu[i].getJava()+"\n");
}
bufferedWriter.flush();
bufferedWriter.close();
System.out.println("文件写入成功!");
return true;
}
public static Student[] readInformation() throws Exception{
Student[] stu = new Student[40];
BufferedReader bufferedReader = new BufferedReader(new FileReader(file));
String temp = "";
int i=0;
while((temp = bufferedReader.readLine()) != null){
String[] str = temp.trim().split("/");//trim()去掉首位空格,split()分割String字符串
String name = str[0];
String number = str[1];
String age = str[2];
String sex = str[3];
String math = str[4];
String english = str[5];
String java = str[6];
stu[i] = new Student(number,name,sex,Integer.valueOf(age),Integer.valueOf(math),Integer.valueOf(english),Integer.valueOf(java));
i++;
}
return stu;
}
}
我将上次使用的FileReader/Writer换成了BufferedReader/Writer缓冲流,并且改进加入断点(存入时对每个信息后加上’\'分隔信息,读取时检测断点,每一个信息分成不同的字符串取出),最后通过转换valueOf转换类型再返回整个数组,大功告成!。
这里要说一个注意点:在使用缓冲流时务必加上flush(),否则会出现信息缺失的bug。
其次,为了让项目每次使用都能读入文件内容,并且和新录入的信息一起进行‘增删改查’:
①我在Controller中加入方法
public boolean addStudentAll(Student[] student) {
if (total < 0 || total > stu.length) {
return false;
} else {
for (Student student1 : student) {
if (student1 != null) {
stu[total++] = student1;
}
}
return true;
}
}
②将下面代码放到View类的Menu()方法中,这样每次进入界面都会读取数组了
student.addStudentAll(saveTools.readInformation());
结果:
改进:
下次会尝试用集合去改进代码,因为数组的存储空间是有限的。