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

如何用Java OpenCSV正确读取制表符分隔的CSV文件?

如何用OpenCSV正确读取制表符分隔的CSV文件

问题根源

你的代码出现错误输出的核心问题有三个:

  • 错误指定分隔符:用空格' '代替了文件实际的制表符'\t',导致OpenCSV把每个空格都当成分隔符,拆分了带空格的字段(比如车型名)
  • 跳过行数不正确:文件前两行是公司名称和时间范围,不属于数据行,应该跳过2行而非1行
  • 字段位置计数错误:@CsvBindByPosition的position从0开始计数,你之前的position值对应列位错误

修正后的代码实现

1. 实体类定义(修正位置绑定)

import lombok.Getter;
import lombok.Setter;
import com.opencsv.bean.CsvBindByPosition;

@Getter
@Setter
public class CsvLine {
    // Product列是第0位(从0开始计数)
    @CsvBindByPosition(position = 0)
    private String model;

    // Country列是第1位
    @CsvBindByPosition(position = 1)
    private String country;
}

2. CSV读取代码(修正分隔符和跳过行数)

import com.opencsv.bean.CsvToBeanBuilder;
import java.io.FileReader;
import java.util.List;

public class CsvReader {
    public static void main(String[] args) {
        String fileName = "C:\\in_progress\\zzz.csv";

        try {
            List<CsvLine> beans = new CsvToBeanBuilder(new FileReader(fileName))
                    .withType(CsvLine.class)
                    .withSeparator('\t') // 改为制表符分隔
                    .withSkipLines(2)    // 跳过前两行无关内容
                    .build()
                    .parse();

            for (CsvLine item : beans) {
                System.out.printf("车型:%s,国家:%s%n", item.getModel(), item.getCountry());
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

关键修正说明

  1. 分隔符修正:将withSeparator(' ')替换为withSeparator('\t'),匹配文件实际的制表符分隔规则,避免拆分带空格的字段
  2. 跳过行数调整:文件前两行是Company ABC和时间范围,不属于数据行,因此设置withSkipLines(2)跳过这两行,直接读取表头和数据
  3. 字段位置修正:OpenCSV的@CsvBindByPosition从0开始计数,Product列是第一列(索引0),Country是第二列(索引1),修正后可正确映射字段

预期输出

车型:Nissan Maxima,国家:USA
车型:BMW X7 M50i,国家:USA
车型:Volvo XC90,国家:USA
车型:Opel Insignia,国家:USA
车型:Renult Triber,国家:USA
车型:Toyota Yaris,国家:USA
车型:Ford Mondeo,国家:USA

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 00:25:19