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
相关产品推荐
相关产品推荐

