Java读取txt存入二维char数组报NumberFormatException如何解决?
问题原因与修正方案
错误原因
你当前代码默认迷宫文件前两行分别存储迷宫的行数和列数,尝试将前两行内容转为整数初始化数组,但你提供的maze0.txt没有前置的行列参数,第一行直接是迷宫内容S#####,调用Integer.parseInt()转换非数字字符串时就会抛出java.lang.NumberFormatException异常。
修正方案
分两种适用场景:
场景1:不修改maze0.txt内容,适配现有文件结构
先把所有迷宫行读取到集合中动态计算行列数,再初始化数组,同时用更安全的try-with-resources语法自动管理流资源,修正后代码如下:
import java.io.File; import java.io.FileReader; import java.io.BufferedReader; import java.io.IOException; import java.util.ArrayList; import java.util.List; class SillyMaze{ static char mazeArr[][]; public static void main(String[] args){ File mazeFile = new File("maze0.txt"); List<String> mazeLines = new ArrayList<>(); // try-with-resources会自动关闭流,无需手动调用close方法 try (BufferedReader bufferedReader = new BufferedReader(new FileReader(mazeFile))){ String line; // 先读取所有行存入集合 while ((line = bufferedReader.readLine()) != null){ mazeLines.add(line); } // 动态获取行列数 int rowCount = mazeLines.size(); int colCount = mazeLines.get(0).length(); mazeArr = new char[rowCount][colCount]; // 转存到二维char数组 for (int i = 0; i < rowCount; i++) { mazeArr[i] = mazeLines.get(i).toCharArray(); } // 测试输出验证读取结果 for (char[] row : mazeArr) { System.out.println(row); } } catch (IOException e){ System.err.println("文件读取错误: " + e.getMessage()); } } }
场景2:允许修改maze0.txt内容
在文件最开头新增两行,分别写入迷宫的行数和列数,你提供的迷宫为6行6列,修改后的maze0.txt内容如下:
6 6 S##### .....# #.#### #.#### ...#.G ##...#
该场景下原有代码基本可以正常运行,建议补充行列数校验逻辑,避免行数不足导致数组越界。
注意事项
- 确保迷宫所有行的长度一致,否则可能出现数组维度不匹配问题
- IO操作优先使用try-with-resources语法管理资源,可避免忘记关流导致的资源泄漏
内容的提问来源于stack exchange,提问作者critter333
相关产品推荐
相关产品推荐

