import java.io.BufferedReader; import java.io.FileReader; import java.io.IOException; import java.util.Map; import java.util.Optional; import java.util.concurrent.ConcurrentHashMap; /** * 用户仓库的内存实现。 * 在程序启动时,从文件中加载所有用户账户。 */ public class UserRepository implements IUserRepository { private final Map userDatabase = new ConcurrentHashMap<>(); public UserRepository() { // 从文件中加载用户数据 loadUsersFromFile(); } /** * 从指定的文本文件中加载用户信息。 * 文件的每一行应遵循 "username,password,level" 格式。 */ private void loadUsersFromFile() { // 使用 try-with-resources 语句确保 BufferedReader 被正确关闭 try (BufferedReader reader = new BufferedReader(new FileReader("./account/account.txt"))) { String line; // 逐行读取文件 while ((line = reader.readLine()) != null) { // 使用逗号分割每行的数据 String[] parts = line.split(","); // 确保每行都有三部分:用户名、密码和用户级别 if (parts.length == 3) { String username = parts[0].trim(); String password = parts[1].trim(); String level = parts[2].trim(); userDatabase.put(username, new User(username, password, level)); } } } catch (IOException e) { // 如果文件未找到或发生其他IO错误,打印错误信息 System.err.println("从文件加载用户数据时出错: " + "./account/account.txt"); } } /** * 根据用户名查找用户。 * * @param username 要查找的用户的用户名。 * @return 如果找到用户,则返回一个包含该用户的Optional; * 如果未找到,则返回一个空的Optional */ @Override public Optional findByUsername(String username) { return Optional.ofNullable(userDatabase.get(username)); } }