打开csv追加一行而不重新添加头

时间:2019-03-25 14:03:50

标签: java opencsv

编辑:我尝试覆盖建议的方法,但添加了一条白线

我正在使用 OpenCSV 从CSV文件中进行读取/写入,并且当用户添加另一个对象时,我需要在对象“ 犯罪”中添加新行一个。
到目前为止,我在所有教程中都只找到了这种书写方式:

 Writer writer  = new FileWriter(path.toString());

StatefulBeanToCsv sbc = new StatefulBeanToCsvBuilder(writer)
   .withSeparator(CSVWriter.DEFAULT_SEPARATOR)
   .build();

List<CsvBean> list = new ArrayList<>();
list.add(new WriteExampleBean("Test1", "sfdsf", "fdfd"));
list.add(new WriteExampleBean("Test2", "ipso", "facto"));

sbc.write(list);
writer.close();

问题在于,在添加新行之前,它还会添加标题,因此我的文件变为:

zipCode,totPopulation,medianAge,totMales,totFemales,totHouseholds,avgHouseholdSize,
91371,1,73.5,0,1,1,1,
90001,57110,26.6,28468,28642,12971,4.4,
90002,51223,25.5,24876,26347,11731,4.36,
90003,66266,26.3,32631,33635,15642,4.22,
zipCode,totPopulation,medianAge,totMales,totFemales,totHouseholds,avgHouseholdSize,
100,100,100,100,100,100,100

其中所有“ 100”值的行是我添加的行。每次要添加一行或多行时,如何防止在行之前添加标题?

1 个答案:

答案 0 :(得分:1)

尝试扩展HeaderColumnNameMappingStrategy并覆盖方法generateHeader以返回空数组。

然后通过withMappingStrategy()将新类的实例传递到StatefulBeanToCsvBuilder

根据MappingStrategy的Javadoc:

  

如果不能或不应该生成头,则必须为零长度的数组   返回,而不是null。

如果要在第一行中包含标题,请确保仅在文件不是新文件时才这样做。