在之前写的五子棋中给他加入文件读取与写入功能,实现用户注册与历史棋盘的效果。
1.注册
public void enrolled() throws IOException {
user(name);
FileWriter fw = new FileWriter(path);
BufferedWriter bw = new BufferedWriter(fw);
bw.write(name);
bw.write("#");
bw.write(passWord);
bw.write("#");
bw.write("\r");//换行
bw.close();
}
实现字符流的写入,写入内容为字符形式,同时用符号来分割需要读取的内容。
path路径如果父路劲中没有错误并且没有这个文件则会生成子文件,我们依次来创建更多用户。
最后调用close方法释放内存。
2.登录
public boolean enter() throws IOException {
user(name);//名字的路径
File file = new File(path);
if (!file.exists()) {
path = PATH;
JOptionPane.showMessageDialog(null, "没有此用户");
return false;
}//读取历史棋盘
FileReader fIleReader = new FileReader(path);
BufferedReader br = new BufferedReader(fIleReader);
String line;
line = br.readLine();
String[] split = line.split("#");
String isName = split[0];
String isPassWord = split[1];
if (name.equals(isName) && passWord.equals(isPassWord)) {
//是否存在历史棋局
while ((line = br.readLine()) != null) {
System.out.println(line);
String[] inSplit = line.split(",");//用逗号将各元素隔开
int b1 = 0, b2 = 0, b3 = 0;
for (int i = 0, count = 0; i < inSplit.length; i++) {
if (count == 0) {
b1 = Integer.valueOf(inSplit[i]);
count = 1;
} else if (count == 1) {
b2 = Integer.valueOf(inSplit[i]);
count = 2;
} else if (count == 2) {
b3 = Integer.valueOf(inSplit[i]);
Chess chess = new Chess(b1, b2, b3);
chessArr2[index2][index] = chess;
index++;
count = 0;
}
}
//下标和棋盘存入
indexArr[index2] = index;
//将一位数组初始化
remake();
index2++;
countAdd();
}
} else {
JOptionPane.showMessageDialog(null, "账号吗密码错误");
return false;
}
//创建相同数量的摇杆,以及管理数组
radioBtnIl();
jrb2Il();
br.close();
fIleReader.close();
return true;
}
注:在没close文件前每一次读取一行指针都会往后移。
点击登录后如果存在文件则读取里面的内容,用String line 来接受br.readLine()读取的内容,bufferread提供了行读取的功能,用在line中创建一个数组用来接受通过#来分割的字符,line.split("#")。读取到账号密码后判定输入的是否相同,相同则继续进行。前面我们将账号密码写入到一行中,历史棋局每一局换一行(下面会提到)。通过遍历每一行,行为null时停止。接着同样分离用“,”隔开的元素代表chess中的r,c,chessFlag。下棋的位置以及棋子颜色,分别接收后创建chess对象存在二维数组中,二维数组每一个一维代表一个棋盘。同时创建一个存下标的一维数组记录二维数组中的下标。在完成之后必须调用染得close方法释放空间。
3.下完后将棋盘存入文件中。
public void saveBoard() throws IOException {
FileWriter fileWriter = new FileWriter(path, true);
BufferedWriter bw = new BufferedWriter(fileWriter);
String s = "";
for (int i = 0; i < index; i++) {
s += chessArr[i].r;
s += ",";
s += chessArr[i].c;
s += ",";
s += chessArr[i].chessFlag;
s += ",";
}
bw.write(s);
bw.write("\r");//分别下一个棋局
bw.close();
}
调用bufferedWrite中写入字符串的方法,我们将 所需要的元素逐个写入,并用“,”隔开,以便读取的时候方便分辨。