基于Java的TXT文件登录程序仅读取首行问题求助
解决TXT文件仅读取第一组账号的登录程序问题
嘿,我看你遇到了登录程序只能用第一个账号的问题——你的settings.txt里明明有好几组账号密码,但程序就认第一个,对吧?
先理清楚你的文件结构:你的TXT是把所有账号密码放在一行里,用空格分隔,比如Luthfi Luthfi是第一组账号密码,Fitra Fitra是第二组,以此类推。你之前的代码应该是只读取了这一行里的前两个元素,没遍历后面的内容。
我给你修改一下Masuk方法,让它能检查所有的账号密码对:
public void Masuk(){ try { String lokasi = "D:/settings.txt"; String username = txtUser.getText().trim(); String password = txtPass.getText().trim(); // 读取整个文件的内容 File file = new File(lokasi); Scanner scanner = new Scanner(file); // 读取整行内容(因为你的所有账号都在一行里) String line = scanner.nextLine(); scanner.close(); // 按空格拆分内容,\\s+可以匹配任意数量的空格 String[] credentials = line.split("\\s+"); boolean loginSuccess = false; // 每两个元素一组,遍历所有账号密码对 for (int i = 0; i < credentials.length; i += 2) { // 防止数组越界,比如最后一个元素刚好是奇数个的情况 if (i + 1 >= credentials.length) break; String storedUser = credentials[i]; String storedPass = credentials[i + 1]; // 对比输入的账号和密码 if (storedUser.equals(username) && storedPass.equals(password)) { loginSuccess = true; break; } } // 根据验证结果给出反馈 if (loginSuccess) { JOptionPane.showMessageDialog(this, "登录成功!"); // 这里可以添加登录后跳转主界面的代码 } else { JOptionPane.showMessageDialog(this, "用户名或密码错误!"); txtPass.setText(""); } } catch (FileNotFoundException e) { JOptionPane.showMessageDialog(this, "找不到设置文件:" + e.getMessage()); e.printStackTrace(); } }
还要给你几个小建议:
- 对用户输入做了
trim()处理,避免用户不小心输入前后空格导致匹配失败 - 增加了文件未找到的异常捕获,程序不会直接崩溃
- 如果你以后想让TXT文件更易读,建议改成每行一组账号密码的格式,比如:
这种情况下,你可以把读取部分改成逐行读取,代码会更清晰:Luthfi Luthfi Fitra Fitra Khori Khori Fitra Syifa// 替换原来的读取整行和遍历数组部分 Scanner scanner = new Scanner(file); boolean loginSuccess = false; while (scanner.hasNextLine()) { String line = scanner.nextLine().trim(); if (line.isEmpty()) continue; // 跳过空行 String[] cred = line.split("\\s+"); if (cred.length >= 2) { String storedUser = cred[0]; String storedPass = cred[1]; if (storedUser.equals(username) && storedPass.equals(password)) { loginSuccess = true; break; } } } scanner.close();
这样修改后,你的程序就能识别所有的账号密码了!
内容的提问来源于stack exchange,提问作者user8775227
相关产品推荐
相关产品推荐

