使用另一个类读取CSV文件然后登录java

时间:2017-02-12 17:08:47

标签: java csv java.util.scanner

我正在尝试从另一个类读取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
...

1 个答案:

答案 0 :(得分:0)

您的approch是正确的。要搜索特定用户,您需要先阅读所有用户并将其存储在list中。您可以执行以下操作:

  1. 创建一个user类来保存用户信息
  2. 创建一个阅读所有用户的方法
  3. 创建搜索用户的方法
  4. 对于第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步,您需要在服务类中添加另一个方法,该方法将搜索列表并返回truefalse,例如:

    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,这将返回falseUser

    main课程中,您可以使用以下流程:

    • 初始化用户列表
    • 通过命令行
    • 读取用户名和密码
    • 调用find方法并打印相应的输出

    请注意,Users课程中的所有方法均为static,因此您无需创建对象。您可以直接调用这些方法,例如Users.readUsers();