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

如何用Java读取CSV指定列(不含表头)并存入ArrayList(不使用第三方依赖)

Java原生实现读取CSV指定列数据

实现前提

本方案仅适用于字段内不含逗号、双引号、换行等CSV特殊转义字符的简单CSV文件,若存在复杂格式场景建议使用专业CSV处理库。

实现逻辑

  • 读取CSV第一行表头,定位目标列对应的下标索引
  • 逐行读取后续数据,按逗号切割每行字段
  • 过滤空值后,将有效数据存入ArrayList

完整代码示例

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;

public class CsvReader {
    /**
     * 读取CSV指定列的非空有效数据
     * @param filePath CSV文件路径
     * @param targetColumnName 目标列名(和表头匹配)
     * @return 不含表头的有效数据集合
     * @throws IOException 文件读取异常
     * @throws IllegalArgumentException 目标列不存在时抛出
     */
    public static ArrayList<String> readSpecifiedColumn(String filePath, String targetColumnName) throws IOException {
        ArrayList<String> resultList = new ArrayList<>();
        // 用try-with-resources自动关闭流
        try (BufferedReader br = new BufferedReader(new FileReader(filePath))) {
            // 读取表头行
            String headerLine = br.readLine();
            if (headerLine == null) {
                return resultList;
            }
            String[] headers = headerLine.split(",");
            // 定位目标列下标
            int targetIndex = -1;
            for (int i = 0; i < headers.length; i++) {
                if (headers[i].trim().equals(targetColumnName)) {
                    targetIndex = i;
                    break;
                }
            }
            if (targetIndex == -1) {
                throw new IllegalArgumentException("目标列不存在:" + targetColumnName);
            }
            // 读取数据行
            String dataLine;
            while ((dataLine = br.readLine()) != null) {
                String[] fields = dataLine.split(",");
                // 避免下标越界
                if (fields.length > targetIndex) {
                    String value = fields[targetIndex].trim();
                    // 仅保留非空有效数据
                    if (!value.isEmpty()) {
                        resultList.add(value);
                    }
                }
            }
        }
        return resultList;
    }

    public static void main(String[] args) {
        try {
            // 读取age列
            ArrayList<String> ageList = readSpecifiedColumn("test.csv", "age");
            // 输出结果:[111, 2232, 32332] 和样例需求匹配
            System.out.println(ageList);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

注意事项

  • 如果CSV非UTF-8编码,可将FileReader替换为InputStreamReader自行指定字符编码,避免乱码
  • 如果需要存储整数类型,可在存入ArrayList时做类型转换即可

内容的提问来源于stack exchange,提问作者reem ahmad

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.13 09:54:02