Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/337.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 注册时检查文本文件中是否存在用户_Java_Swing_Bufferedwriter - Fatal编程技术网

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

Java 注册时检查文本文件中是否存在用户,java,swing,bufferedwriter,Java,Swing,Bufferedwriter,在为注册和登录系统创建注册类时,它成功地将用户添加到文本文件中。我要问的是如何让程序检查文本文件中是否已经存在用户的登录ID 文本文件的内容: User{nickname= Barry, loginID= baz15, password= dan} 当输入相同的注册详细信息时,它会再次添加此信息。如何使其不再将此项添加到文件中,而是显示一个JOptionPane 我有一个数组列表,它引用用户类来检查文本文件中是否存在用户。这是我目前的代码: public class Registration

在为注册和登录系统创建注册类时,它成功地将用户添加到文本文件中。我要问的是如何让程序检查文本文件中是否已经存在用户的登录ID

文本文件的内容:

User{nickname= Barry, loginID= baz15, password= dan}
当输入相同的注册详细信息时,它会再次添加此信息。如何使其不再将此项添加到文件中,而是显示一个
JOptionPane

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

 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("");
        }

    }
}                       
公共类注册JFrame扩展了javax.swing.JFrame{
ArrayList用户=新建ArrayList();
公共注册jframe(){
初始化组件();
lblErrorMessage.setVisible(false);
}
私有void btnRegisterActionPerformed(java.awt.event.ActionEvent evt){
字符串昵称=edtNickname.getText();
字符串loginID=edtLoginID.getText();
String password=String.valueOf(edtPassword.getPassword());
String confirmPassword=String.valueOf(edtrenterpassword.getPassword());
如果(!password.equals(confirmPassword)){
lblErrorMessage.setText(“密码不匹配”);
}
if(昵称.equals(“”)| | loginID.equals(“”)| |密码.equals(“”){
lblErrorMessage.setText(“必须填写文本字段”);
}
对于(int i=0;i
如果我理解你的意思是正确的,我会用另一种方法:

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("");
    }

}

}
公共类注册JFrame扩展了javax.swing.JFrame{
ArrayList用户=新建ArrayList();
公共注册jframe(){
初始化组件();
lblErrorMessage.setVisible(false);
}
私有void btnRegisterActionPerformed(java.awt.event.ActionEvent evt){
字符串昵称=edtNickname.getText();
字符串loginID=edtLoginID.getText();
String password=String.valueOf(edtPassword.getPassword());
String confirmPassword=String.valueOf(edtrenterpassword.getPassword());
如果(!password.equals(confirmPassword)){
lblErrorMessage.setText(“密码不匹配”);
}
if(昵称.equals(“”)| | loginID.equals(“”)| |密码.equals(“”){
lblErrorMessage.setText(“必须填写文本字段”);
}
对于(int i=0;i

对于您的文件,使用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();
    }
}
接下来,您必须确定何时可以添加用户并保存它。尝试在btnRegistrationPerformed方法中使用布尔值,如下所示

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();
    }
}
private void btnRegisterActionPerformed(java.awt.event.ActionEvent evt){
字符串昵称=edtNickname.getText();
字符串loginID=edtLoginID.getText();
String password=String.valueOf(edtPassword.getPassword());
String confirmPassword=String.valueOf(edtrenterpassword.getPassword());
如果(!password.equals(confirmPassword)){
lblErrorMessage.setText(“密码不匹配”);
}
if(昵称.equals(“”)| | loginID.equals(“”)| |密码.equals(“”){
lblErrorMessage.setText(“必须填写文本字段”);
}
布尔addUser=true;
对于(int i=0;i
您当前总是将用户添加到文件中,这是不正确的。我们使用布尔值来确定用户是否不存在,只有在找不到用户时,我们才会添加用户并保存到文件中