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

Java读取文件存二维数组时如何校验每行数字元素数量是否一致

解决方案

你可以在逐行读取文件的过程中同时完成列数校验、数据读取两个操作,不需要单独先统计行数,避免重复读取IO降低效率。

核心实现逻辑

  • 读取所有行到List中,避免流重复打开的资源泄露问题
  • 以第一行拆分后的元素数量为基准列数
  • 遍历后续每一行,拆分后统计元素数,和基准列数对比,不一致直接抛出异常终止运行
  • 全部校验通过后再初始化二维数组,写入数据

代码示例

import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.List;

public class ReadFileToArray {
    public static void main(String[] args) throws Exception {
        String filePath = "替换为你的实际文件路径";
        // 一次性读取所有行,底层自动处理IO流关闭
        List<String> allLines = Files.readAllLines(Paths.get(filePath));
        if (allLines.isEmpty()) {
            throw new RuntimeException("文件内容为空,无法读取数据");
        }
        // 计算基准列数,trim()避免行首尾空格干扰拆分结果
        int baseColSize = allLines.get(0).trim().split(",").length;
        int[][] result = new int[allLines.size()][baseColSize];

        for (int i = 0; i < allLines.size(); i++) {
            String line = allLines.get(i).trim();
            String[] numStrs = line.split(",");
            // 校验当前行列数是否和基准一致
            if (numStrs.length != baseColSize) {
                throw new RuntimeException(String.format("第%d行元素个数不匹配,预期%d个,实际%d个",
                        i + 1, baseColSize, numStrs.length));
            }
            // 转换为int类型存入二维数组
            for (int j = 0; j < numStrs.length; j++) {
                result[i][j] = Integer.parseInt(numStrs[j].trim());
            }
        }
        // 后续可直接使用result数组处理业务逻辑
    }
}

异常场景测试

针对你给出的示例内容:

67,1,43
13,37,61,3
31,73,7

运行上述代码会直接抛出异常:第2行元素个数不匹配,预期3个,实际4个,程序终止运行,符合你的需求。

注意事项

  • 代码中加入了trim()操作,避免行首尾、数字前后有空格导致的拆分或转换异常
  • 如果不需要保留异常信息只想快速终止,校验不匹配时可以直接调用System.exit(1)退出程序
  • 如果文件体积特别大(GB级别)不想一次性加载到内存,可以用Files.lines()配合迭代器逐行读取校验,用完手动关闭流即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 13:36:02