我在用opencsv http://opencsv.sourceforge.net/将 Java bean 写入带有标题的 CSV 文件。文件名包含当前日期。如果用户在同一天第二次运行它,它会追加到文件中,但会添加另一个标题行。
如何附加到文件但没有列标题。
public class CSVExport {
final File USERHOME = new File(System.getProperty("user.home"));
final List<saleExport> listSaleExport = new ArrayList<>();
final ObjectMapper mapper = new ObjectMapper();
public void createCsvFile(String Region, Map<String, String> currentSale) throws IOException {
mapper.configure(MapperFeature.ACCEPT_CASE_INSENSITIVE_PROPERTIES, true);
// use column position mapping strategy for no headers?
LocalDate today = LocalDate.now();
final SaleExport saleExport = mapper.convertValue(currentSale, SaleExport.class);
listSaleExport.add(saleExport);
writeToFile(today +" LA.csv", listSaleExport);
}
public void writeToFile(String filename, List<listSaleExport> listSaleExport) throws IOException {
File file = new File(PROCESSED_DIR +"\\", "filename");
if (!file.exists()) {
try {
Writer writer = new FileWriter(PROCESSED_DIR +"\\" +filename, true);
StatefulBeanToCsvBuilder<listSaleExport> beanToCsv = new StatefulBeanToCsvBuilder<>(writer);
StatefulBeanToCsv<listSaleExport> beanWriter = beanToCsv.build();
beanWriter.write(listSaleExport);
writer.close();
} catch (Exception ex) {
System.out.println("Error : " + ex.getMessage());
}
} else {
try {
Writer writer = new FileWriter(PROCESSED_DIR +"\\" +"filename");
StatefulBeanToCsvBuilder<listSaleExport> beanToCsv = new StatefulBeanToCsvBuilder<>(writer);
StatefulBeanToCsv<listSaleExport> beanWriter = beanToCsv.build();
beanWriter.write(listSaleExport);
writer.close();
} catch (Exception ex) {
System.out.println("Error : " + ex.getMessage());
}
}
}
}
好一个。当我们在 opencsv 中写入时,附加是我们没有考虑太多的事情,因为它有潜在的风险(出现问题可能会损坏一个好的文件),所以写入更受青睐。
也就是说,在 sourceforge 中提出错误或功能请求,如果有足够的兴趣,我们将尝试在 4.3 版本中获取它(4.2 已预订)。
也就是说,如果您想解决这个问题,请创建自己的映射策略 https://sourceforge.net/p/opencsv/source/ci/master/tree/src/main/java/com/opencsv/bean/MappingStrategy.java扩展的类标题列名称映射策略 https://sourceforge.net/p/opencsv/source/ci/master/tree/src/main/java/com/opencsv/bean/HeaderColumnNameMappingStrategy.java您所需要的只是重写generateHeader 方法以返回空字符串数组。您可以查看以下代码列位置映射策略 https://sourceforge.net/p/opencsv/source/ci/master/tree/src/main/java/com/opencsv/bean/ColumnPositionMappingStrategy.java看看我在说什么。这将阻止写入标头。在这种情况下,您只需要在 else 部分使用它。
希望有帮助。
:)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)