java - 附加到没有标题的 CSV 文件

标签 java opencsv

我正在使用 opencsv将 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 中打开一个 bug 或功能请求,如果有足够的兴趣,我们将尝试在 4.3 版本中获取它(4.2 已预订稳定)。

也就是说,如果您想解决这个问题,请创建您自己的 MappingStrategy扩展 HeaderColumnNameMappingStrategy 的类您只需要覆盖 generateHeader 方法即可返回空字符串数组。可以查看ColumnPositionMappingStrategy中的代码看看我在说什么。这将防止写入 header 。在这种情况下,您只需要在 else 部分使用它。

希望有帮助。

:)

关于java - 附加到没有标题的 CSV 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48922642/

相关文章:

java - "This method is deprecated as the user should use the Java 5 conventions."这是什么意思?

java - 重定向到接收 Controller 后传递 modelAndView 对象

java - 从 java 导入 MySQL DB 不起作用

java - 在Tomcat6中设置背书目录

java - 使用 openCSV 忽略 CSV 值 + 将 CSV 文件中的 int 值存储在单独的二维数组元素中

java - CSVReader 的 readNext() 函数不循环遍历 csv 的所有行 [编辑 : How to handle erroneous CSV (remove unescaped quotes)]

java - 如何返回任务并用于更新 javafx 中的进度条

java - 通过列表 Activity 启动 Activity

java - 如何在Java中处理csv文件引号中的逗号?

java - java中的csv文件的电子邮件验证