从TXT文件读取数据:实现登录成功后显示用户姓名求助
实现登录成功后显示用户姓名的解决方案
你的登录验证逻辑已经走通了,只需要补充捕获用户姓名和登录成功后展示这两步就可以实现需求。我帮你调整了代码,同时做了一些细节优化,避免常见的异常问题:
核心修改说明
- 在匹配用户名密码时,同步提取并保存用户的姓名信息
- 登录成功后通过UI标签或弹窗展示欢迎语
- 补充了资源自动关闭和格式校验,防止数组越界、资源泄漏等问题
修改后的完整代码
import javax.swing.JOptionPane; import java.io.BufferedReader; import java.io.FileReader; import java.io.IOException; import java.util.Arrays; public void Masuk(){ try { String lokasi = "D:/settings.txt"; String username = txtUser.getText().toLowerCase(); String password = txtPass.getText().toLowerCase(); // 用try-with-resources自动关闭流,比手动关闭更安全可靠 try (FileReader fr = new FileReader(lokasi); BufferedReader br = new BufferedReader(fr)) { String line, user, pass, fullName; boolean isLoginSuccess = false; String loggedInUserName = ""; // 存储登录成功后的用户姓名 while ((line = br.readLine()) != null) { String[] parts = line.split(" "); // 跳过格式不正确的行,避免数组越界异常 if (parts.length < 4) { continue; } user = parts[1].toLowerCase(); pass = parts[2].toLowerCase(); // 如果姓名是多单词(比如"John Doe"),用这行拼接完整姓名 fullName = String.join(" ", Arrays.copyOfRange(parts, 3, parts.length)); // 如果姓名是单个单词,直接用 fullName = parts[3]; 即可 if (user.equals(username) && pass.equals(password)) { isLoginSuccess = true; loggedInUserName = fullName; // 保存匹配到的用户姓名 break; // 找到目标用户后直接跳出循环,提升效率 } } // 处理登录结果 if (isLoginSuccess) { // 方式1:用界面标签显示(假设你有一个名为lblWelcome的JLabel) lblWelcome.setText("欢迎回来," + loggedInUserName + "!"); // 方式2:弹出提示框 JOptionPane.showMessageDialog(null, "登录成功!欢迎你," + loggedInUserName + "!"); // 这里可以添加跳转到主界面的逻辑 } else { JOptionPane.showMessageDialog(null, "用户名或密码错误!"); } } } catch (IOException e) { JOptionPane.showMessageDialog(null, "读取配置文件失败:" + e.getMessage()); e.printStackTrace(); } }
额外注意点
- 确保你的
settings.txt每行格式为:[前缀标识] [用户名] [密码] [用户姓名](示例:user alice 1234 Alice Smith) - 如果你的姓名字段在配置行中的位置不同,调整
parts数组的索引即可 try-with-resources是Java 7+的特性,能自动释放文件流资源,避免内存泄漏
内容的提问来源于stack exchange,提问作者Walls
相关产品推荐
相关产品推荐

