对如何使用BufferedReader读取User对象的arraylist感到困惑

时间:2018-03-23 23:03:19

标签: java swing bufferedreader

用户注册后,可以登录,使用BufferedReader从文本文件中读取其详细信息。但是,我不确定如何使用BufferedReader逐行读取User对象的arraylist来检查文本文件中的详细信息并允许用户登录。

这就是我写的:

 public class LoginJFrame extends javax.swing.JFrame {
ArrayList<User> users = new ArrayList<>();

public LoginJFrame() {
    initComponents();
}



private void btnLoginActionPerformed(java.awt.event.ActionEvent evt) {                                         
    String nickname = edtNickname.getText();
    String loginID = edtLoginID.getText();
    String password = String.valueOf(edtPassword.getPassword());
    try {
        BufferedReader br = new BufferedReader(new FileReader("userinfo.txt"));
        String readFile = br.readLine();
        while (readFile != null) {
            String[] splitString = readFile.split(",");
            nickname = splitString[0];
            loginID = splitString[1];
            password = splitString[2];
            User user = new User(nickname, loginID, password);
            users.add(user);
            readFile = br.readLine();
            this.dispose();
            ThreadJFrame threadPage = new ThreadJFrame();
            threadPage.setVisible(true);

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




}

我有另一个arrayList是字符串的唯一原因是因为我无法想办法让BufferedReader逐行读取我的User arrayList。有没有办法让BufferedReader读取arraylist类类型而不是字符串ArrayList?

User对象是一个单独的类,它使用字符串存储昵称,登录ID和密码。

public class User  {
    String nickname;
    String loginID;
    String password;

public User(String nickname, String loginID, String password) {
    this.nickname = nickname;
    this.loginID = loginID;
    this.password = password;
}

public String getNickname() {
    return nickname;
}

public String getLoginID() {
    return loginID;
}

public String getPassword() {
    return password;
}

public void setNickname(String nickname) {
    this.nickname = nickname;
}

public void setLoginID(String loginID) {
    this.loginID = loginID;
}

public void setPassword(String password) {
    this.password = password;
}

@Override
public String toString() {
    return "User{" + "nickname= " + nickname + ", loginID= " + loginID + ", password= " + password + '}';
}

1 个答案:

答案 0 :(得分:1)

    currentLine = br.readLine();
    while (currentLine != null) {
        userstring.add(currentLine);
    }

好吧,该代码只读取一行,因为您只调用一次readline()方法。

代码应该是这样的:

    currentLine = br.readLine();

    while (currentLine != null) {
        userstring.add(currentLine);
        currentLine = br.readLine();
    }

由于User的数据包含在一行中(因为您只保存了User类的toString()),您可能需要将数据解析为其各自的标记,这可能是通过使用{ {1}}方法。

当然,你的readToFile(...)方法确实无法做任何事情,因为你在本地定义了ArrayList,并且没有从方法中返回任何数据,所以你的其他人不能这样做访问数据。