从文件中读取存储的用户名和密码,并且实现用户的注册和登录操作。
不使用Propreties类,而是使用IO流中的字节流读取信息,就需要使用String类的split方法,并且提前做好标记符号
split方法是将字符串中按指定的符号分割开,比如"123#456",就变成"123",“456”,而且是个数组,所以可以通过split方法先分割开每个用户,然后再分割开每个用户的用户名和密码
这里没有把读取文件中的用户名和密码写成方法,所以在用户注册成功后又复制粘贴了一遍读取操作,看着有点累赘
因为是一个字节一个字节的读取文本,所以不能使用中文注册用户名,会乱码
import java.io.*;
import java.util.ArrayList;
import java.util.Scanner;
/**
* Created by 不要剁我爪 on 2020/12/3.
*/
public class LoginSystemC {
public static void main(String[] args) throws IOException {
Scanner scanner = new Scanner(System.in);
File file = new File("C:\\Users\\hasee\\Desktop\\JAVA study\\JavaSE\\src\\com\\yaorange\\day18\\userInformationC.ini");
InputStream inputS = new FileInputStream(file);
OutputStream outputS = new FileOutputStream(file,true);//不写true的话会导致每次都是覆盖储存文件
ArrayList<String> users = new ArrayList<>();
boolean flag1 = true;
while (flag1) {//读取每个用户名与密码,以#为结尾,一个字符串一个字符串的写入
int read;
StringBuffer sB = new StringBuffer();
while ((read = inputS.read()) != '#') {
if (read == -1) {//读到末尾了,跳出
flag1 = false;
break;
}
sB.appendCodePoint(read);
}
if(flag1==false)
break;
users.add(sB.toString());//将用户写入用户列表
}
ArrayList<String> userlist = new ArrayList<>();//用户名列表
ArrayList<String> pwdlist = new ArrayList<>();//密码列表
for (String user1 : users) {
String arr[] = user1.split("-");//将用户名与密码分割开
userlist.add(arr[0]);
pwdlist.add(arr[1]);
}
boolean flag = true;
while (flag) {
System.out.println("1、注册 2、登录 3、退出");
int x = scanner.nextInt();
String dontneed = scanner.nextLine();
switch (x) {
case 1:
System.out.println("请输入用户名:");
String username = scanner.nextLine();
if (userlist.contains(username)) {
System.out.println("用户名存在,不能注册");
break;
} else {
System.out.println("请输入密码:");
String pwd = scanner.nextLine();
outputS.write((username+"-"+pwd+"#").getBytes());
System.out.println("用户注册成功");
//刷新刚注册的用户,不然会导致刚注册的用户无法登录
users = new ArrayList<>();
flag1 = true;
while (flag1) {
int read;
StringBuffer sB = new StringBuffer();
while ((read = inputS.read()) != '#') {
if (read == -1) {
flag1 = false;
break;
}
sB.appendCodePoint(read);
}
if(flag1==false)
break;
users.add(sB.toString());
}
userlist = new ArrayList<>();//用户名列表
pwdlist = new ArrayList<>();//密码列表
for (String user1 : users) {
String arr[] = user1.split("-");
System.out.println(user1);
userlist.add(arr[0]);
pwdlist.add(arr[1]);
}
break;
}
case 2:
System.out.println("请输入用户名:");
String s1 = scanner.nextLine();
if (userlist.contains(s1)) {
System.out.println("请输入密码:");
String pwdL = scanner.nextLine();
if (pwdL.equals(pwdlist.get(userlist.indexOf(s1))))
System.out.println("登录成功");
else System.out.println("密码输入错误");
break;
} else {
System.out.println("用户名不存在");
break;
}
case 3:
flag = false;
break;
}
}
inputS.close();
outputS.close();
scanner.close();
}
}