编辑:我尝试覆盖建议的方法,但添加了一条白线
我正在使用 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”值的行是我添加的行。每次要添加一行或多行时,如何防止在行之前添加标题?
答案 0 :(得分:1)
尝试扩展HeaderColumnNameMappingStrategy
并覆盖方法generateHeader
以返回空数组。
然后通过withMappingStrategy()
将新类的实例传递到StatefulBeanToCsvBuilder
根据MappingStrategy
的Javadoc:
如果不能或不应该生成头,则必须为零长度的数组 返回,而不是null。
如果要在第一行中包含标题,请确保仅在文件不是新文件时才这样做。