我正在尝试从另一个类读取CSV文件,然后获取详细信息并将其与主类中用户提供的登录信息进行比较。我可以把所有东西放在主类中,但它看起来不是很整洁。
- 主 -
package supscription.service;
/**
*
* @author jakec
*/
import java.util.*;
public class SubscriptionService {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
String username;
String password;
Scanner input = new Scanner(System.in);
System.out.println("Log in:");
System.out.println("username: ");
username = input.nextLine();
System.out.println("password: ");
password = input.nextLine();
users check = new users(username, password);
if(check.auth())
System.out.println("You are logged in");
else
System.out.println("Log in failed");
}
}
- 用户 -
public class users {
private String username;
private String password;
private String File = ("MEMBER.csv");
Scanner scan = new Scanner (SubscriptionService.class.getResourceAsStream(File)).useDelimiter(",");
String user = scan.nextLine();
String pass = scan.nextLine();
public users(String user, String pass){
username = user;
password = pass;
}
public boolean auth(){
if((username.equals (user)) && (password.equals (pass)))
return true;
else
return false;
}
}
- CSV -
Member_ID,Username,Password
11001,Jack Brown,123
11009,James White,12
11014,Barbara Jones,58
...
答案 0 :(得分:0)
您的approch是正确的。要搜索特定用户,您需要先阅读所有用户并将其存储在list
中。您可以执行以下操作:
user
类来保存用户信息对于第1步,用户类可以包含id,username和密码,例如:
class User{
private int id;
private String username;
private String password;
public User(int id, String username, String password){
this.id = id;
this.username = username;
this.password = password;
}
public int getId() {
return id;
}
public String getUsername() {
return username;
}
public String getPassword() {
return password;
}
}
对于第2步,您可以创建服务类并阅读所有用户,例如:
class Users{
private static List<User> users;
public static synchronized void readUsers(){
if(null == users){
users = new ArrayList<User>();
String File = ("MEMBER.csv");
Scanner scan = new Scanner (Users.class.getResourceAsStream(File));
String line;
while((line = scan.nextLine()) != null){
String[] tokens = line.split(",");
users.add(new User(Integer.parseInt(tokens[0]), tokens[1], tokens[2]));
}
scan.close();
}
}
}
对于第3步,您需要在服务类中添加另一个方法,该方法将搜索列表并返回true
或false
,例如:
public static synchronized boolean find(String username, String password){
if(null == users){
throw new IllegalStateException("user list is not initialised");
}
return users.stream()
.filter(u -> u.getUsername().equals(username))
.filter(u -> u.getPassword().equals(password))
.findFirst()
.isPresent();
}
根据列表中是否存在true
,这将返回false
或User
。
在main
课程中,您可以使用以下流程:
find
方法并打印相应的输出请注意,Users
课程中的所有方法均为static
,因此您无需创建对象。您可以直接调用这些方法,例如Users.readUsers();