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

如何用Apache Commons CSV Parser按列读取CSV文件?

如何用Apache Commons CSV Parser按列读取CSV文件?

问题描述

我有如下格式的CSV文件:

Column A,Column B
Cell 1,Cell 2
Cell 3,Cell 4

希望按列而非按行读取,期望输出结果为:

Column A , Cell 1 ,Cell 3
Column B  , Cell 2, Cell 4

但查阅文档发现该工具似乎仅支持按行读取,请问是否有实现按列读取的方法?


解决方案

Apache Commons CSV本身确实是按行解析的,但可以通过先按行读取全量数据,再转换为按列组织的结构来实现需求。具体步骤和代码示例如下:

实现思路

  1. 读取CSV的表头和所有行记录
  2. 用二维列表存储每一列的所有数据(表头+单元格内容)
  3. 遍历二维列表,按列输出内容

示例代码

import org.apache.commons.csv.CSVFormat;
import org.apache.commons.csv.CSVParser;
import org.apache.commons.csv.CSVRecord;

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

public class CsvColumnReader {
    public static void main(String[] args) throws IOException {
        // 配置CSV格式(默认逗号分隔、带表头,可根据实际调整)
        CSVFormat csvFormat = CSVFormat.DEFAULT.withHeader();
        
        try (FileReader reader = new FileReader("your-csv-file.csv");
             CSVParser parser = new CSVParser(reader, csvFormat)) {
            
            // 获取表头列表
            List<String> headers = parser.getHeaderNames();
            // 初始化列存储容器:每个子列表对应一列的数据
            List<List<String>> columnData = new ArrayList<>();
            for (int i = 0; i < headers.size(); i++) {
                columnData.add(new ArrayList<>());
                // 先将表头加入对应列
                columnData.get(i).add(headers.get(i));
            }
            
            // 按行读取,将单元格数据分配到对应列
            for (CSVRecord record : parser) {
                for (int i = 0; i < headers.size(); i++) {
                    columnData.get(i).add(record.get(i));
                }
            }
            
            // 按列输出结果
            for (List<String> column : columnData) {
                System.out.println(String.join(" , ", column));
            }
        }
    }
}

说明

  • 如果你的CSV有特殊格式(比如制表符分隔、带引号包裹等),只需调整CSVFormat的配置即可,例如使用CSVFormat.TDF对应制表符分隔,CSVFormat.EXCEL对应Excel兼容格式。
  • 这种方法的核心是将行数据转存为列结构,本质上还是基于Apache Commons CSV的行读取能力,属于轻量化的二次处理,性能上对于常规大小的CSV文件完全够用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 23:50:58