Java 基于txt文件创建简单登录
无法理解以下代码为什么不能正常工作。首先,系统从用户那里获取输入。然后系统从Java 基于txt文件创建简单登录,java,login,Java,Login,无法理解以下代码为什么不能正常工作。首先,系统从用户那里获取输入。然后系统从.txt文件读取所有数据,并与用户输入进行比较。但系统从未找到类似的用户名和密码 这个想法是基于.txt文件中存储的用户名和密码创建简单的登录。有人能帮忙吗 private static void login() { String record = null; FileReader in = null; try { in = new FileReader("adminlogin.t
.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();
}
}
您的问题是循环及其比较:
while ((record = br.readLine()) !=null) {
if (user.equals(record) && pass.equals(record)) {
//...
}
//...
}
您从文件中读取了一整行,该文件位于记录中,但随后您将用户和通过与此行进行比较。除非用户
等于通过
,否则这将永远不起作用
要么将用户名和密码存储在文件的一行中,然后将该行拆分为用户名和密码,要么将用户名和密码存储在两行中,然后需要为每个用户读取循环中的内容
此外,在仅选中第一个用户后,您确实会抛出一个错误,如果您实际找到了该用户,则不会退出循环
解决
我假设您在文件中的记录类似于“用户名密码”,然后执行以下操作:
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
}
Mainemenu菜单=null;
而((record=br.readLine())!=null){
//用空格字符分隔行
//拆分[0]您的问题在于循环及其比较:
while ((record = br.readLine()) !=null) {
if (user.equals(record) && pass.equals(record)) {
//...
}
//...
}
您从文件中读取了一整行,该行位于记录中,但随后您将用户
和通过
与此行进行比较。这将永远不会起作用,除非用户
等于通过
要么将用户名和密码存储在文件的一行中,然后将该行拆分为用户名和密码,要么将用户名和密码存储在两行中,然后需要为每个用户读取循环中的内容
此外,在仅选中第一个用户后,您确实会抛出一个错误,如果您实际找到了该用户,则不会退出循环
解决
我假设您在文件中的记录类似于“用户名密码”,然后执行以下操作:
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
}
Mainemenu菜单=null;
而((record=br.readLine())!=null){
//用空格字符分隔行
//拆分[0]使用调试器逐行逐行检查代码,应该会变得明显。提示:一旦发现文件中有一行与用户名不匹配,就会打印错误。如果没有一行匹配,则要打印错误。这只能在循环之后进行。如果找到user.Advi,还必须中断循环ce:开始使用方法,并使用以下签名创建一个:boolean existsLineEqualTo(BufferedReader,字符串用户名)
。使用调试器逐行检查代码,应该会变得明显。提示:一旦发现文件中有一行与用户名不匹配,就会打印错误。如果没有一行匹配,则要打印错误。这只能在循环之后进行。如果发现使用错误,还必须中断循环r、 建议:开始使用方法,并使用以下签名创建一个:boolean existsLineEqualTo(BufferedReader,String userName)
。更新了if
-else
分支中其他缺陷的解决方案。谢谢,但应该是String[]split=record.split(\\s)
@BogdanSkripnik谢谢,我的错误。编辑。更新了if
-else
分支中其他缺陷的解决方案。谢谢,但应该是String[]split=record.split(\\s”);
@BogdanSkripnik谢谢,我的错误。编辑。