对如何使用 BufferedReader 读取用户对象的数组列表感到困惑
Confused on how to use BufferedReader for reading arraylist of User objects
用户注册后,他们可以登录,应该使用 BufferedReader 从文本文件中读取他们的详细信息。但是,我不确定如何使用 BufferedReader 逐行读取用户对象的数组列表,以检查文本文件中的详细信息并允许用户登录。
这是我写的:
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 class 类型而不是字符串 ArrayList?
User 对象是一个单独的class,使用字符串存储昵称、登录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 + '}';
}
currentLine = br.readLine();
while (currentLine != null) {
userstring.add(currentLine);
}
嗯,该代码只读取一行,因为您只调用了一次 readline() 方法。
代码应该是这样的:
currentLine = br.readLine();
while (currentLine != null) {
userstring.add(currentLine);
currentLine = br.readLine();
}
并且由于 User
的数据包含在一行中(因为您只保存了用户 class 的 toString()),您需要将数据解析为单独的数据令牌可能通过使用 String.split(...)
方法。
当然,您的 readToFile(...) 方法实际上不会做任何事情,因为您在本地定义 ArrayList 并且 return 方法中没有任何数据,因此您的其余部分 class 无法访问数据。
用户注册后,他们可以登录,应该使用 BufferedReader 从文本文件中读取他们的详细信息。但是,我不确定如何使用 BufferedReader 逐行读取用户对象的数组列表,以检查文本文件中的详细信息并允许用户登录。
这是我写的:
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 class 类型而不是字符串 ArrayList?
User 对象是一个单独的class,使用字符串存储昵称、登录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 + '}';
}
currentLine = br.readLine();
while (currentLine != null) {
userstring.add(currentLine);
}
嗯,该代码只读取一行,因为您只调用了一次 readline() 方法。
代码应该是这样的:
currentLine = br.readLine();
while (currentLine != null) {
userstring.add(currentLine);
currentLine = br.readLine();
}
并且由于 User
的数据包含在一行中(因为您只保存了用户 class 的 toString()),您需要将数据解析为单独的数据令牌可能通过使用 String.split(...)
方法。
当然,您的 readToFile(...) 方法实际上不会做任何事情,因为您在本地定义 ArrayList 并且 return 方法中没有任何数据,因此您的其余部分 class 无法访问数据。