IO流实现注册与登陆以及遇到的问题
本例是通过IO流实现模拟登陆的小程序。编写过程中也出现了不少bug,不过都一一调试改正了过来。编写过程中出现的相关问题:
1.关于键盘录入用户信息,因为在注册和登陆过程中都使用到了,故把其封装成一个方法,在注册和登陆使用时调用即可,节省内存空间;
2.在注册和登陆过程中都需要判断原本存储用户信息的文本是否为空,此处应该是不能多次调用IO流中的BufferedReader的readLine方法,只能使用一次,所以需要创建连两个流对象,分别调用;
3.关于return、break、continue三个关键字的使用问题:(1)return并不是用于结束循环语句的,其功能是结束一个方法,当一个方法执行到return语句时(return关键字后还可以跟变量、常量和表达式),这个方法将被结束。Return是直接结束整个方法,不管这个return处于多少层循环中。(2)break用于完全结束一个循环,跳出循环体。除此外,break,还可以直接结束其外层循环,此时需要在break后紧跟一个标签这个标签用于结束一个外层循环。(3)continue的作用是只是忽略本次循环的剩下语句,接着开始下一次循环,并不会终止循环。与break类似,continue后也可以紧跟一个标签,用于直接跳过标签所标示循环的档次循环的剩下语句,重写开始下一次循环。
4.关于String的split方法的使用:
split
public String[] split(String regex)
根据给定正则表达式的匹配拆分此字符串。
该方法的作用就像是使用给定的表达式和限制参数 0 来调用两参数 split 方法。因此,所得数组中不包括结尾空字符串。
例如,字符串 “boo:and:foo” 使用这些表达式可生成以下结果:
Regex |
结果 |
: |
{ “boo”, “and”, “foo” } |
o |
{ “b”, “”, “:and:f” } |
参数:
regex – 定界正则表达式
返回:
字符串数组,它是根据给定正则表达式的匹配拆分此字符串确定的
抛出:
PatternSyntaxException – 如果正则表达式的语法无效
5.关于编写过程中语句的顺序问题,循环嵌套的问题,其实自己感觉实现编写首先要有一个大体的思路,然后才能进行编写,对于不明白的流程,可以使用Debug进行程序执行流程的查看,进而找出问题,解决问题。。。
6.注册和登陆过程中的判断使用了变量count来计数,通过count的比较,从而进行输出语句的控制。。。感觉自己太low了!。。。
以下是具体实现的代码:
package cn.itcast.test_02;
import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Scanner;
/*
需求:在src目录下创建一个peoperties文件,文件信息为以下内容:
杰克,1234
rose,1234
编写程完成登录和注册功能,
*/
public class Test {
public static void main(String[] args) throws IOException {
while (true) {
// 欢迎界面,给出选择项
System.out.println(“————–欢迎光临————–“);
System.out.println(“1 登录”);
System.out.println(“2 注册”);
System.out.println(“3 退出”);
System.out.println(“请输入你的选择:”);
// 键盘录入选择,根据选择做不同的操作
Scanner sc = new Scanner(System.in);
int choice = sc.nextInt();
// switch判断
switch (choice) {
case 1:
dengLu();
break;
case 2:
zhuCe();
break;
case 3:
System.out.println(“谢谢使用,欢迎下次再来”);
System.exit(0);
break;
default:
System.out.println(“您输入的选项不存在,请确认后重新输入!”);
}
}
}
// 键盘录入信息方法
public static String init() {
// 创建字符串缓冲区对象
StringBuffer s1 = new StringBuffer();
// 创建键盘录入对象
Scanner sc = new Scanner(System.in);
System.out.println(“请输入用户名:”);
s1.append(sc.nextLine());
s1.append(“,”);
System.out.println(“请输入密码:”);
s1.append(sc.nextLine());
String s = s1.toString();
return s;
}
// 登录方法
private static void dengLu() throws IOException {
// 登录界面,请输入用户名和密码
System.out.println(“————–登录界面————–“);
// 调用键盘录入方法
String s = init();
// 创建高效输入流对象
BufferedReader br = new BufferedReader(new FileReader(“peoperties.txt”));
BufferedReader br1 = new BufferedReader(new FileReader(“peoperties.txt”));
// 操作数据
String b;
if ((b = br.readLine()) == null) {
System.out.println(“未检测到您的用户名,请先注册。。。”);
} else {
int count1 = 0;
int count2 = 0;
while ((b = br1.readLine()) != null) {
//统计总共循环多少次
count1++;
if (s.equals(b)) {
System.out.println(“登录成功!”);
break;
} else {
//统计输入的信息与一注册信息不相同的次数
count2++;
// System.out.println(“您的用户名或密码不正确,请确认后,重新登录!”);
}
}
if (count2 == count1++) {
System.out.println(“您的用户名或密码不正确,请确认后,重新登录!”);
}
}
// 关闭资源
br.close();
br1.close();
}
// 注册功能
@SuppressWarnings(“resource”)
public static void zhuCe() throws IOException {
System.out.println(“————–注册界面————–“);
// 调用键盘录入方法
String s = init();
// 创建高效输出流对象
BufferedReader br = new BufferedReader(new FileReader(“peoperties.txt”));
BufferedWriter bw = new BufferedWriter(new FileWriter(“peoperties.txt”, true));
BufferedReader br1 = new BufferedReader(new FileReader(“peoperties.txt”));
BufferedWriter bw1 = new BufferedWriter(new FileWriter(“peoperties.txt”, true));
String b;
// 判断是否为空
if ((b = br.readLine()) == null) {
bw.write(s);
bw.newLine();
System.out.println(“恭喜您注册成功!”);
// break;
} else {
// 如果不为空
int count = 0;
while ((b = br1.readLine()) != null) {
// 把读到的字符串根据给定正则表达式的匹配拆分,按逗号拆分,
String[] arr = b.split(“,”);
if (s.split(“,”)[0].equals(arr[0])) {
count++;
System.out.println(“您注册的用户名已经注册过,请确认后重新选择”);
// 判断是否继续注册
Scanner sc1 = new Scanner(System.in);
System.out.println(“还要继续注册吗? Y/N”);
String s2 = sc1.next();
// 输入Y则继续注册,调用注册方法
if (s2.equals(“Y”)) {
zhuCe();
// System.out.println(“恭喜您注册成功!”);
} else if (s2.equals(“N”)) {
System.out.println(“谢谢使用!”);
} else {
System.out.println(“您输入的选项有误。。。”);
}
break;
}
}
if (count == 0) {
// 不相同,则写出
bw1.write(s);
bw1.newLine();
System.out.println(“恭喜您注册成功!”);
}
}
// 关闭资源
br.close();
bw.close();
br1.close();
bw1.close();
}
}