Java如何将文本文件中管理员信息逐行读取到二维数组
修正Java登录系统的文件读取与二维数组处理代码
问题背景
我正在Java中开发一个登录系统,管理员信息按以下格式保存到文本文件Admin.txt中:
Hannah,Joshua,Female,373ac,admin123
Leena,Kevin,Female,3283c,admin123
其中第4项(373ac)是用户名,第5项(admin123)是密码,每位管理员信息占单独一行。
管理员登录时需输入姓名,程序要查找对应行并比对用户名和密码完成登录。我打算用二维数组存储这些信息,但当前代码把所有内容读成了一维数组,比如:
[Hannah,Joshua,Female,373ac,admin123,Leena,Kevin,Female,3283c,admin123]
当前错误代码
public class ReadFile { public static void main(String[] args) throws Exception { BufferedReader bufReader = new BufferedReader(new FileReader("Admin.txt")); ArrayList<String> listofLines = new ArrayList<>(); String line = bufReader.readLine(); while (null != (line = in.readLine())) { listofLines.add(line); } bufReader.close(); int [][] map = new int[bufReader.size()][]; int q = 0; for (int i = 0; i < map.length; q++) { String[] rooms = bufReader.get(i).split(","); map[i] = new int[rooms.length]; for (int w = 0; w < rooms.length; w++) { map[q][w] = Integer.parseInt(rooms[w]); } System.out.println(Arrays.toString(map[q])); } } }
代码问题分析
- 读取文件时误用未定义的
in变量,应使用bufReader - 错误将字符串类型的管理员信息转为
int数组,姓名、用户名等均为字符串,无法转成整数 - 循环变量
i和q逻辑混乱,且调用了BufferedReader不存在的size()、get(i)方法 - 未处理文件中的空行,会导致无效数据
修正后的代码
import java.io.BufferedReader; import java.io.FileReader; import java.util.ArrayList; import java.util.Arrays; public class AdminLoginSystem { public static void main(String[] args) throws Exception { BufferedReader bufReader = new BufferedReader(new FileReader("Admin.txt")); // 用ArrayList存储每行管理员的分割数据,最终可转为二维字符串数组 ArrayList<String[]> adminList = new ArrayList<>(); String line; while ((line = bufReader.readLine()) != null) { // 跳过空行,避免无效数据 line = line.trim(); if (line.isEmpty()) { continue; } // 按逗号分割每行数据,存入集合 String[] adminInfo = line.split(","); adminList.add(adminInfo); } bufReader.close(); // 转为二维字符串数组(按需使用) String[][] adminArray = adminList.toArray(new String[0][]); // 打印验证二维数组结构 for (String[] admin : adminArray) { System.out.println(Arrays.toString(admin)); } // 登录验证示例:模拟输入姓名、用户名、密码 String inputFirstName = "Hannah"; String inputLastName = "Joshua"; String inputUsername = "373ac"; String inputPassword = "admin123"; boolean loginSuccess = false; for (String[] admin : adminArray) { // 注意数组索引从0开始,第4项对应索引3,第5项对应索引4 if (admin[0].equals(inputFirstName) && admin[1].equals(inputLastName) && admin[3].equals(inputUsername) && admin[4].equals(inputPassword)) { loginSuccess = true; break; } } System.out.println(loginSuccess ? "登录成功" : "登录失败"); } }
修正说明
- 文件读取修复:用
bufReader.readLine()正确读取每行,跳过空行过滤无效数据 - 数据类型修正:使用
String[][]存储信息,匹配所有字段的字符串类型 - 二维数组实现:通过
ArrayList<String[]>收集每行数据,再转为二维数组,符合需求 - 添加登录逻辑:演示如何根据输入的信息匹配管理员数据,完成登录验证
内容的提问来源于stack exchange,提问作者user18258423
相关产品推荐
相关产品推荐

