Java中如何读取文本文件并将内容转换为二维char数组
实现逻辑与代码
你可以按以下步骤实现该方法:
- 第一步:创建Scanner关联指定文件,读取文件所有行存入临时列表,解决提前未知文件行数的问题
- 第二步:根据列表的长度确定二维数组的行数,遍历每一行字符串,调用
toCharArray()方法转为char数组,存入二维数组对应位置即可 - 第三步:关闭输入流,返回生成的二维数组
基础实现代码(不规则二维数组,每行长度与原文本行长度一致)
import java.io.File; import java.io.FileNotFoundException; import java.util.ArrayList; import java.util.Scanner; public class FileReaderUtil { /* creates scanner for filename creates 2D array based on row/col and characters in file */ public static char[][] read(String filename) throws FileNotFoundException{ // 关联文件创建Scanner,用try-with-resources自动关闭资源 try (Scanner scanner = new Scanner(new File(filename))) { ArrayList<String> lineList = new ArrayList<>(); // 读取所有行 while (scanner.hasNextLine()) { lineList.add(scanner.nextLine()); } // 初始化二维数组 char[][] charArray = new char[lineList.size()][]; for (int i = 0; i < lineList.size(); i++) { // 每行字符串直接转char数组赋值 charArray[i] = lineList.get(i).toCharArray(); } return charArray; } } }
可选:生成规则二维数组(所有行长度相同,短行末尾补空格)
如果要求所有行的列数一致,以最长行的长度为基准,可以修改实现:
public static char[][] readFixedCol(String filename) throws FileNotFoundException{ try (Scanner scanner = new Scanner(new File(filename))) { ArrayList<String> lineList = new ArrayList<>(); while (scanner.hasNextLine()) { lineList.add(scanner.nextLine()); } // 计算最长行长度 int maxCol = 0; for (String line : lineList) { if (line.length() > maxCol) { maxCol = line.length(); } } // 初始化固定列数的二维数组 char[][] charArray = new char[lineList.size()][maxCol]; for (int i = 0; i < lineList.size(); i++) { String line = lineList.get(i); for (int j = 0; j < maxCol; j++) { // 超出当前行长度的位置填空格 charArray[i][j] = j < line.length() ? line.charAt(j) : ' '; } } return charArray; } }
注意事项
- 代码中使用了try-with-resources语法管理Scanner资源,无需手动调用
close()方法,资源会自动释放 nextLine()方法会自动丢弃行尾的换行符,最终生成的数组中不会包含换行字符- 若文件存在空行,对应行的char数组长度为0(基础实现版本)
内容的提问来源于stack exchange,提问作者samiya m
相关产品推荐
相关产品推荐

