You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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 ? "登录成功" : "登录失败");
    }
}

修正说明

  1. 文件读取修复:用bufReader.readLine()正确读取每行,跳过空行过滤无效数据
  2. 数据类型修正:使用String[][]存储信息,匹配所有字段的字符串类型
  3. 二维数组实现:通过ArrayList<String[]>收集每行数据,再转为二维数组,符合需求
  4. 添加登录逻辑:演示如何根据输入的信息匹配管理员数据,完成登录验证

内容的提问来源于stack exchange,提问作者user18258423

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 02:15:33