当前位置: 首页 > 知识库问答 >
问题:

在Apache Camel中附加到具有标头的CSV文件

姚正真
2023-03-14

我需要根据传入的消息构建一个csv文件。为此,我将以下内容附加到文件:

.toD("file://" + OUTPUT_PATH + "?FileName=${exchangeProperty.OUTPUT_FILENAME}" + "&FileExist=Append")

虽然这工作正常,但我遇到了一个问题。我还需要在CSV文件中包含一个标题行。现在我正在使用. mashall(). csv()编组成CSV格式,但这省略了标题。

虽然我可以创建一个CSV格式,标题为:

CsvDataFormat csvFormatWithHeader = new CsvDataFormat();
csvFormatWithHeader.setHeader(Arrays.asList(new String[] { "A", "B", "C", "D" }.clone()));

.marshall(csvFormatWithHeader)

这将为我添加的每一行添加标题行。因此,我想要实现的是仅在创建新文件时添加标题。

我尝试了两种方法,但都没有成功:

  1. 检查路由中是否存在文件,并相应地应用csv格式

作为最后一个选择,我可以在文件关闭时添加头,但这感觉效率很低,因为我不知道该文件可能会变得多大。

如何使用Apache Camel 2.23.2实现这两种方法之一。

共有1个答案

鄂育
2023-03-14

好的,最终使用一个标题,我能够让选项1工作。这就是我现在的路线:

.setProperty("OUTPUT_FILENAME",method(this, "determineOutputFilename()"))
.setHeader("fileExists", method(this, "outputFileExists"))
.choice()
  .when(header("fileExists"))
    .marshal().csv()
  .endChoice()
  .otherwise()
    .marshal(csvFormatWithHeader)
  .endChoice()
.end()

文件检查逻辑是(在route类中实现):

public boolean outputFileExists(@ExchangeProperty("OUTPUT_FILENAME") String fileName){
    boolean fileExists = new File(PROCESSING_PATH + "/" + fileName).exists();
    return fileExists;
}
 类似资料:
  • 问题内容: 我正在使用opencsv将Java bean写入带有标头的CSV文件中。文件名包含当前日期。如果用户在同一天第二次运行它,它将追加到文件中,但添加另一个标题行。 如何附加到文件但没有列标题。 问题答案: 好一个 在opencsv中进行编写时,我们并不怎么想追加内容,因为它可能存在风险(出问题了,您可能会破坏本来很好的文件),因此倾向于使用写入。 那就是说在sourceforge中打开一

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

  • 我有一个CSV文件,有五列和数百行。我想给每一列添加一个标题。例如 我已经尝试了下面的代码,它确实成功地添加了标题,但是,它也将所有列合并为一个。这不是我想要的 此代码将导致下表

  • 问题内容: 我已经通过import语句从Objective C(针对目标“ MyApp”)成功调用了我的Swift类: 我现在创建了一个名为“ MyAppLite”的新目标 编译新目标时,出现错误,因为代码需要“ MyApp-Swift.h”,但是编译器正在创建“ MyAppLite-Swift.h” 因此,我需要为要编译的目标创建条件Swift / ObjC标头。 怎么做,还是有更好的办法? 问

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

  • 我写了一个合并两个csv文件的Python脚本,现在我想在最后的csv中添加一个头。我试图遵循这里报告的建议,我得到了以下错误:。解决这个问题最重要的方法是什么? 以下是我正在使用的代码: