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

使用opencsv的@CsvBindByPosition为何仅能读取单列数据?

问题原因

你的CSV文件使用**分号;**作为列分隔符,但opencsv 5.3的默认分隔符是逗号,,这导致解析时无法正确拆分列:

  • 使用@CsvBindByPosition时,整行被识别为单个字段,只有position=0的字段能获取到值,其余字段自然为null;
  • 使用@CsvBindByName时,因列拆分失败,无法匹配表头与实体类字段,所有字段均为null。
解决方案

1. 针对@CsvBindByPosition的修复

在构建CsvToBean时显式指定分号作为分隔符即可:

List<ABC> beans = new CsvToBeanBuilder(new FileReader("etestcsv"))
               .withType(ABC.class)
               .withSeparator(';') // 指定CSV的分隔符为分号
               .build()
               .parse();

2. 针对@CsvBindByName的修复

除了指定分隔符,还需要确保实体类字段与CSV表头精准匹配(表头包含特殊字符、空格,需显式指定列名):

修改后的实体类ABC:

public class ABC
{
   @CsvBindByName(column = "Prozess")
   private String prozess;
   @CsvBindByName(column = "Rüstvorgang")
   private String ruestVorgang;
   @CsvBindByName(column = "Prozessdauer Minuten")
   private String prozessDauerMinuten;
   @CsvBindByName(column = "Station")
   private String station;
   @CsvBindByName(column = "Küvettentyp")
   private String kuevettenTyp;
   @CsvBindByName(column = "Küvettentemperatur Grad Celsius")
   private String kuevettenTemperatur;
   @CsvBindByName(column = "Werker")
   private String werker;
   @CsvBindByName(column = "Gasmischung")
   private String gasMischung;
   @CsvBindByName(column = "GasKonzentration PPM")
   private String gasKonzentration;

   // 必须添加getter和setter方法,opencsv依赖这些方法赋值
   public String getProzess() { return prozess; }
   public void setProzess(String prozess) { this.prozess = prozess; }
   // 其余字段的getter/setter同理补充
}

修改后的构建代码:

List<ABC> beans = new CsvToBeanBuilder(new FileReader("etestcsv"))
               .withType(ABC.class)
               .withSeparator(';')
               .build()
               .parse();

额外注意事项

  • 确保实体类字段有对应的getter/setter方法,openccsv默认通过setter方法为字段赋值;
  • 如果CSV表头与实体类字段名仅大小写差异,可添加withIgnoreCase(true)配置简化映射,但表头含特殊字符或空格时,显式指定列名更可靠。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 04:54:16