注册时检查用户是否存在于文本文件中

Checking if user exists in text file when registering

注册登录系统class时,成功将用户添加到文本文件中。我要问的是如何让程序检查用户的登录 ID 是否已存在于文本文件中。

文本文件的内容:

User{nickname= Barry, loginID= baz15, password= dan}

当输入相同的注册详细信息时,它会再次添加。我怎样才能让它不再将它添加到文件中,而是显示 JOptionPane?

我有一个引用用户 class 的数组列表来检查用户是否存在于文本文件中。到目前为止,这是我的代码:

 public class RegistrationJFrame extends javax.swing.JFrame {

    ArrayList<User> users = new ArrayList<>();

    public RegistrationJFrame() {
        initComponents();
        lblErrorMessage.setVisible(false);
    }


    private void btnRegisterActionPerformed(java.awt.event.ActionEvent evt) {
        String nickname = edtNickname.getText();
        String loginID = edtLoginID.getText();
        String password = String.valueOf(edtPassword.getPassword());
        String confirmPassword = String.valueOf(edtReenterPassword.getPassword());


        if (!password.equals(confirmPassword)) {
            lblErrorMessage.setText("Passwords do not match");
        }
        if (nickname.equals("") || loginID.equals("") || password.equals("")) {
            lblErrorMessage.setText("You must fill in  the text fields");
        }

        for (int i = 0; i < users.size(); i++) {
            if (users.get(i).getLoginID().equals(loginID)) {
                JOptionPane.showMessageDialog(null, "User exists in file");
            } else {
                JOptionPane.showMessageDialog(null, "User does not exist");
            }

        }
        try {
            User user = new User(nickname, loginID, password);
            users.add(user);
            File filename = new File("userinfo.txt");
            if (!filename.exists()) {
                filename.createNewFile();
            }


            FileWriter fw = new FileWriter(filename, true);
            BufferedWriter bw = new BufferedWriter(fw);
            bw.write(user.toString());
            bw.newLine();
            bw.close();


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

    }
}                       

如果我理解你是对的,我会用另一种方法来做:

public class RegistrationJFrame extends javax.swing.JFrame {

ArrayList<User> users = new ArrayList<>();

public RegistrationJFrame() {
    initComponents();
    lblErrorMessage.setVisible(false);
}


private void btnRegisterActionPerformed(java.awt.event.ActionEvent evt) {
    String nickname = edtNickname.getText();
    String loginID = edtLoginID.getText();
    String password = String.valueOf(edtPassword.getPassword());
    String confirmPassword = String.valueOf(edtReenterPassword.getPassword());


    if (!password.equals(confirmPassword)) {
        lblErrorMessage.setText("Passwords do not match");
    }
    if (nickname.equals("") || loginID.equals("") || password.equals("")) {
        lblErrorMessage.setText("You must fill in  the text fields");
    }

    for (int i = 0; i < users.size(); i++) {
        if (users.get(i).getLoginID().equals(loginID)) {
            JOptionPane.showMessageDialog(null, "User exists in file");
        } else {
            JOptionPane.showMessageDialog(null, "User does not exist");
            User user = new User(nickname, loginID, password);
            users.add(user);
            saveUser(user);
        }

    }
}        

private void saveUser(User user) {
    try {
        File filename = new File("userinfo.txt");
        if (!filename.exists()) {
            filename.createNewFile();
        }


        FileWriter fw = new FileWriter(filename, true);
        BufferedWriter bw = new BufferedWriter(fw);
        bw.write(user.toString());
        bw.newLine();
        bw.close();


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

}

}

对于您的文件,使用 json 文件可能会更好。如果您想向用户添加更多信息,可能会更容易。

一个简单的修复方法是将您的用户重写到文件中,而不是将新用户附加到您的文件中。这意味着您只需遍历列表并在每次创建新用户时将所有用户重写到文件中。您可以像这样创建一个 saveToFile() 方法并调用它

private void saveToFile()
{
    try{
        File filename = new File("userinfo.txt");
        if (!filename.exists()) {
            filename.createNewFile();
        }
        FileWriter fw = new FileWriter(filename, false); //false so you don't append and overwrite
        BufferedWriter bw = new BufferedWriter(fw);
        //now loop your arraylist of users to resave them to your file
        for(User currUser : users)
        {
            bw.write(currUser.toString());
            bw.newLine();
        }
        bw.close();

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

接下来您必须确定何时可以添加用户并保存。尝试像这样在 btnRegisterActionPerformed 方法中使用布尔值

private void btnRegisterActionPerformed(java.awt.event.ActionEvent evt) {
    String nickname = edtNickname.getText();
    String loginID = edtLoginID.getText();
    String password = String.valueOf(edtPassword.getPassword());
    String confirmPassword = String.valueOf(edtReenterPassword.getPassword());


    if (!password.equals(confirmPassword)) {
        lblErrorMessage.setText("Passwords do not match");
    }
    if (nickname.equals("") || loginID.equals("") || password.equals("")) {
        lblErrorMessage.setText("You must fill in  the text fields");
    }

    boolean addUser = true;
    for (int i = 0; i < users.size(); i++) {
        if (users.get(i).getLoginID().equals(loginID)) {
            JOptionPane.showMessageDialog(null, "User exists in file");
            addUser = false;
            break;//no need to keep checking so break out of the for loop
         } else {
            JOptionPane.showMessageDialog(null, "User does not exist");
         }
    }

    if(addUser)
    {
        User user = new User(nickname, loginID, password);
        users.add(user);
        //now save the contents of the list to the file
        saveToFile();
    }
}

您目前总是将用户添加到您的文件中,这是不正确的。我们使用boolean来判断用户是否不存在,只有当找不到用户时才添加用户并保存到文件中。