Java读取指定格式TXT文件并填充矩阵的实现疑问
如何读取TXT文件内容并填充到Java矩阵中?
你的TXT文件格式示例:
123 456
你现有的代码已经能根据文件内容创建出正确维度的矩阵(比如示例中2行3列),但缺少填充矩阵内容的逻辑。下面是可行的解决方案,同时优化原代码中重复扫描文件的问题:
优化后的完整代码
import java.io.File; import java.io.FileNotFoundException; import java.util.ArrayList; import java.util.List; import java.util.Scanner; public class MatrixReader { public static int[][] readMatrix(String filePath) throws FileNotFoundException { // 用List存储所有行,避免两次扫描文件 List<String> lines = new ArrayList<>(); // try-with-resources自动关闭Scanner,防止资源泄漏 try (Scanner sc = new Scanner(new File(filePath))) { while (sc.hasNextLine()) { String line = sc.nextLine().trim(); if (!line.isEmpty()) { // 跳过空行,避免维度错误 lines.add(line); } } } if (lines.isEmpty()) { return new int[0][0]; // 空文件返回空矩阵 } int rows = lines.size(); int cols = lines.get(0).length(); int[][] matrix = new int[rows][cols]; // 填充矩阵核心逻辑 for (int i = 0; i < rows; i++) { String line = lines.get(i); for (int j = 0; j < cols; j++) { // 字符转整数:利用ASCII码差值,'0'的ASCII码为48,减去后得到对应数字 matrix[i][j] = line.charAt(j) - '0'; } } return matrix; } // 测试验证 public static void main(String[] args) { try { int[][] matrix = readMatrix("src/User/url.txt"); // 打印矩阵查看结果 for (int[] row : matrix) { for (int num : row) { System.out.print(num + " "); } System.out.println(); } } catch (FileNotFoundException e) { System.err.println("文件未找到:" + e.getMessage()); } } }
关键逻辑说明
- 避免重复扫描:原代码先扫一遍统计行数,再重新读取内容,这里用
List<String>一次性存储所有行,提升效率。 - 字符转数字:通过字符ASCII码差值转换,是Java中字符转单个数字的常用简便方法。
- 空行处理:跳过文件中的空行,防止因空行导致矩阵维度计算错误。
- 资源管理:
try-with-resources语法自动关闭Scanner,无需手动处理资源释放。
原代码的小问题修正
- 你定义的
URL变量未实际使用,直接用方法参数filePath即可。 - 文件路径中的反斜杠需用双反斜杠
\\转义,或直接使用正斜杠/(Java支持两种路径分隔符)。
内容的提问来源于stack exchange,提问作者Karim Abou El Naga
相关产品推荐
相关产品推荐

