无法理解为什么以下代码无法正常运行。首先,系统从用户获得输入。然后,系统从.txt
文件中读取所有数据,并与用户输入进行比较。但系统从未找到类似的用户名和密码。
我们的想法是根据.txt
文件中存储的用户名和密码创建简单登录。有人可以帮忙吗?
private static void login() {
String record = null;
FileReader in = null;
try {
in = new FileReader("adminlogin.txt");
BufferedReader br = new BufferedReader(in);
Scanner keyboard = new Scanner(System.in);
System.out.print("Username: ");
String user = keyboard.nextLine();
System.out.print("Password: ");
String pass = keyboard.nextLine();
while ((record = br.readLine()) !=null) {
if (user.equals(record) && pass.equals(record)) {
Mainemenu menu = new Mainemenu();
menu.AdminMenu();
} else {
System.out.println("________----Error----________\n press 'Enter' to continue...");
keyboard.nextLine();
checkInput();
}
}
} catch (IOException e) {
e.getCause();
}
}
答案 0 :(得分:2)
你的问题是循环及其比较:
while ((record = br.readLine()) !=null) {
if (user.equals(record) && pass.equals(record)) {
//...
}
//...
}
您从record
中的文件中读取整行,但是您将 user
和pass
与此行进行比较。除非user
等于pass
。
您已将用户名和密码存储在文件中的一行中 - 然后您必须将该行拆分为用户名和密码 - 或者您将名称和密码存储在两个单独的行中 - 然后您需要读取在每个用户的循环中。
此外,如果您确实找到了用户,那么在选中仅第一个用户并且您没有退出循环后,您会抛出错误。
我认为您在文件中的记录类似于"用户名密码",然后执行:
Mainemenu menu = null;
while ((record = br.readLine()) !=null) {
// Split line by a whitespace character
// split[0] <- username
// split[1] <- password
String[] split = record.split("\\s");
if (user.equals(split[0]) && pass.equals(split[1])) {
menu = new Mainemenu();
menu.AdminMenu();
// You found the user, exit the loop
break;
}
// Delete else branch
}
if (menu == null) {
// User not found
}
当然,您可以使用split
中的分隔符字符串,为记录使用任何其他分隔符或序列。