'How can I compare User and password input to a text file?

Heyoo! I'm creating a simple login form using the swing package in java and I am having trouble in checking if the username and password is correct or not.

this here is the code currently:

public void actionPerformed(ActionEvent e) {
    try{
    File user = new File("Usernames.txt");
    File pass = new File("Passwords.txt");
    FileReader frUsername = new FileReader(user);
    FileReader frPassword = new FileReader(pass);
    BufferedReader brUsername = new BufferedReader(frUsername);
    BufferedReader brPassword = new BufferedReader(frPassword);
    String username = brUsername.readLine();
    String password = brPassword.readLine();

    if (e.getSource() == btnLogin){
        while(username != null && password != null){
           
        if ((txtUsername.getText()).equals(username) && (new String (jpfPassword.getPassword()).equals(password))){
            JOptionPane.showMessageDialog(null, "Welcome: " + username, "Login Successful",JOptionPane.INFORMATION_MESSAGE); //this is for testing purposes only
        }
        else{
            JOptionPane.showMessageDialog(null, "Invalid Username or Password", "Unable to Login",0); //this is for testing purposes only
        }
       
        break;
    }
    }
    brUsername.close();
    brPassword.close();
}
    catch(IOException err){
        System.err.println("File not found.");
    }
}

}

The idea is to have multiple accounts stored in the password and usernames files. for example the file content is:

Username.txt:

       SampleUsername1
       SampleUsername2

Password.txt:

    SamplePassword1
    SamplePassword2

If line 1 from the username file is "sampleUsername1" then the password for it is also from line 1 "samplePassword1" of the password file. if the user and password isn't the same line or not in the file, it should give an "invalid" error. I know it is not secure to put passwords in a txt file but this is only for practice purposes as I am still learning how to code. Any kind of help and tips is really appreciated. Thanks!



Solution 1:[1]

This works fine for me:

public static void main(String[] args) {
    String txtUsername = "username2";
    String jpfPassword = "password2";
    try {
        File user = new File("Usernames.txt");
        File pass = new File("Passwords.txt");
        FileReader frUsername = new FileReader(user);
        FileReader frPassword = new FileReader(pass);
        BufferedReader brUsername = new BufferedReader(frUsername);
        BufferedReader brPassword = new BufferedReader(frPassword);
        String username = brUsername.readLine();
        String password = brPassword.readLine();

        boolean loginSuccess = false;
        while (username != null && password != null) {

            if ((txtUsername).equals(username) && (jpfPassword.equals(password))) {
                JOptionPane.showMessageDialog(null, "Welcome: " + username, "Login Successful", JOptionPane.INFORMATION_MESSAGE); //this is for testing purposes only
                loginSuccess = true;
                break;
            }
            username = brUsername.readLine();
            password = brPassword.readLine();
        }
        if (!loginSuccess) {
            JOptionPane.showMessageDialog(null, "Invalid Username or Password", "Unable to Login", 0); //this is for testing purposes only
        }
        brUsername.close();
        brPassword.close();

    } catch (IOException e) {
        e.printStackTrace();
    }
}

My Usernames.txt and Passwords.txt look like this

username
username1
username2

respectively

password
password1
password2

The main problem was that you were only checking the first line. Once you changed the break; to the readline() methods, the and you can't give the failed message everytime you check a name. That's why you have to loop through everything first, and then check if you failed or not.

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 Jhanzaib Humayun