在处理所有文本文件之前执行其他语句

时间:2020-05-11 14:29:37

标签: java

我是新来的程序员。

我正在编程一个登录系统,该系统可以通过文件处理来验证用户名和密码。

我遇到了这个问题,我的登录系统可以验证我的password.txt中的第一对凭据,但是由于“ else”语句执行,因此如果第二条对执行,则没有机会验证第二对凭据。两个凭证不匹配。

所有帮助将不胜感激。

public void verifyLogin(String username, String password) throws FileNotFoundException {

    try {
        File readCredentials = new File("credentials.txt");

        Scanner readFile = new Scanner(readCredentials);

        boolean matchFound = false;

        while (readFile.hasNextLine() && matchFound == false) {

            uIUsername = readFile.nextLine();
            uIPassword = readFile.nextLine();

            if (uIUsername.equals(username) && uIPassword.equals(password)) {

                System.out.println("You are logged in");

                readFile.close();

                matchFound = true;
            }
            else {
                System.out.println("Error");

                readFile.close();

                matchFound = true;
            }
        }
    }
    catch (Exception e) {
        System.out.println("Exception");
    }
}

1 个答案:

答案 0 :(得分:2)

循环完成后,您需要打印错误消息。请执行以下操作:

public void verifyLogin(String username, String password) {
    Scanner readFile;
    try {
        File readCredentials = new File("credentials.txt");
        readFile = new Scanner(readCredentials);
        boolean matchFound = false;
        while (readFile.hasNextLine() && matchFound == false) {
            uIUsername = readFile.nextLine();
            uIPassword = readFile.nextLine();
            if (uIUsername.equals(username) && uIPassword.equals(password)) {
                System.out.println("You are logged in");
                matchFound = true;
            }
        }
        if (!matchFound) {
            System.out.println("Error");
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
    readFile.close();
}

请注意,我还只放置了一次readFile.close(),而不是在ifelse这两个部分都重复了。

另外,请注意,我使用了e.printStackTrace(),它将确保在出现任何异常的情况下都能打印出完整的堆栈跟踪。