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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 00:39:03