Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/363.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 基于txt文件创建简单登录_Java_Login - Fatal编程技术网

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谢谢,我的错误。编辑。