当前位置: 首页 > 面试题库 >

附加到不带标题的CSV文件

左丘照
2023-03-14
问题内容

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

那就是说,如果您想解决这个问题,请创建自己的MappingStrategy类,以扩展HeaderColumnNameMappingStrategy,并且您需要做的是在generateHeader方法上重写以返回空的String数组。您可以查看ColumnPositionMappingStrategy中的代码,以了解我在说什么。这将防止标题被写入。在这种情况下,您仅需要在else部分中使用它。

希望能有所帮助。

:)



 类似资料:
  • 我想读取多个.csv文件,并将其文件名的日期时间部分附加到列标题中。每个 csv 文件都包含在特定日期时间获取的数据。每个文件名都具有以下格式: yyyy-mm-DD _ hh-mm-ss _ someothertext 每个文件只包含一列数据。 我成功地将多个文件导入为数据帧列表,如下所示: 然后,我将这些文件连接成一个数据帧,这样每一列都包含来自其中一个文件的数据: 然而,这是我丢失文件名信息

  • 我需要根据传入的消息构建一个csv文件。为此,我将以下内容附加到文件: 虽然这工作正常,但我遇到了一个问题。我还需要在CSV文件中包含一个标题行。现在我正在使用. mashall(). csv()编组成CSV格式,但这省略了标题。 虽然我可以创建一个CSV格式,标题为: 这将为我添加的每一行添加标题行。因此,我想要实现的是仅在创建新文件时添加标题。 我尝试了两种方法,但都没有成功: 检查路由中是否

  • 我有3个维度为(a*2、b*2、c*2)的数据帧,而a、b、c是不同的数字。我想把它们添加到一个csv文件中,但每次都写不出来。我使用了csv的熊猫数据帧输出端 但做不到。 我的代码- 但是,我得到的最终输出是最后一个数据帧,而不是所有其他数据帧。

  • 问题内容: 我编写了一个Python脚本,用于合并两个csv文件,现在我想在最终的csv中添加标头。我尝试按照此处报告的建议进行操作,但出现以下错误:。解决此问题的最有效方法是什么? 这是我正在使用的代码: 问题答案: 该班预计 字典 的每一行。如果您只想编写一个初始标头,请使用常规并在标头的简单行中传递: 另一种方法是在跨数据复制时生成字典:

  • 我有一个CSV文件,有三列:col1,col2,col3。我试图在这个文件中附加一个只包含col2的数据框 结果是: 我希望: 有可能以某种方式实现这一点吗?

  • 如何将数据附加到文件的末尾(或开头)?我试着用 但它只写最后一项。