Java入门-学生成绩管理系统(四)
文件管理类:FileControler
在这个类中,需要:
1.读取数据、
2.写入数据。
在文件中,采用*字符作为结束符。
在读取数据时,以遇到*作为停止读入标志。
每一次写入新的数据,并退出程序之后,都将会把数据重新写入txt写字本中。并且依然以*字符作为结束符。
/*FileControler*/
package control;
import model.StudentInfo;
import java.io.*;
import java.util.ArrayList;
public class FileControler {
/*/容纳所有信息的数组*/
public static ArrayList all_student=new ArrayList< StudentInfo>();
private File file=new File("data.txt");
public void fileStart() throws IOException {
checkFile();
readFromFile();
}
public void fileFinish() throws IOException {
try {
writeToFile();
} catch (IOException e) {
e.printStackTrace();
}
}
/*检测文件是否存在
* 若不存在,则创建文件*/
private void checkFile() throws IOException {
if(file.exists()==false)
{
file.createNewFile();
initFile();
}
}
private void initFile() throws IOException {
FileOutputStream fos=new FileOutputStream(file);
DataOutputStream dos=new DataOutputStream(fos);
for(int i=0;i<6;i++)
dos.writeUTF("*");
}
/*
* 从文件读取数据*/
private void readFromFile() throws IOException {
FileInputStream fis=new FileInputStream(file);
DataInputStream dis=new DataInputStream(fis);
/*/判断文件是否结束*/
while(true)
{
StudentInfo obj=new StudentInfo();
obj.ID=dis.readUTF();
obj.name=dis.readUTF();
obj.grade=dis.readUTF();
obj.sex=dis.readUTF();
obj.age=dis.readUTF();
obj.score=dis.readUTF();
if(obj.ID.equals("*")&&
obj.name.equals("*")&&
obj.grade.equals("*")&&
obj.sex.equals("*")&&
obj.age.equals("*")&&
obj.score.equals("*"))
break;
all_student.add(obj);
}
}
/*/
* 向文件写入数据*/
private void writeToFile() throws IOException {
FileOutputStream fos=new FileOutputStream(file);
DataOutputStream dos=new DataOutputStream(fos);
StudentInfo obj;
for(int i=0;i<all_student.size();i++)
{
obj=(StudentInfo)all_student.get(i);
dos.writeUTF(obj.ID);
dos.writeUTF(obj.name);
dos.writeUTF(obj.grade);
dos.writeUTF(obj.sex);
dos.writeUTF(obj.age);
dos.writeUTF(obj.score);
}
/*/写入文件结束标志*/
for(int i=0;i<6;i++)
dos.writeUTF("*");
}
}