基于txt文件创建简单登录

时间:2016-12-25 22:58:14

标签: java login

无法理解为什么以下代码无法正常运行。首先,系统从用户获得输入。然后,系统从.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();
    }
}

1 个答案:

答案 0 :(得分:2)

你的问题是循环及其比较:

while ((record = br.readLine()) !=null) {

    if (user.equals(record) && pass.equals(record)) {
        //...
    }

    //...

}

您从record中的文件中读取整行,但是您将 userpass与此行进行比较。除非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中的分隔符字符串,为记录使用任何其他分隔符或序列。