可以从java对象生成File

时间:2015-08-10 10:45:54

标签: java spring apache-camel filewriter

我需要生成一个大型文件,该文件将在Java中完成,因此一个方法被命中,服务转到存储库返回一个类型为X的列表作为Java对象。然后我需要将此列表放在一个文件中并将其发送到ftp服务器。

我知道我可以使用camel将文件放在ftp服务器上,但是想知道camel是否可以从Java对象生成文件然后放在ftp服务器上?

我的代码看起来像这样:

 List<ObjectX> xList = someRepo.getListOfx();

所以我需要将xList写入文件并放在ftp服务器上。

1 个答案:

答案 0 :(得分:1)

一般来说,要将POJO消息转换为基于文本(或二进制)的表示形式,您可以使用Camel Dataformat。在您的路线中,您将使用marshallunmarshall关键字来执行转化。

有几种Camel数据格式可用于编组/解组CSV,包括CSV dataformatBindy dataformat(但在“数据格式”页面上,“平面数据结构编组”下列出了一些其他数据格式头)。 Bindy的一个优点是它还可以支持其他非结构化格式(例如固定宽度记录)

另请注意:

  • 使用Bindy,您必须为模型类添加注释(ObjectX
  • 使用CSV,您必须将模型对象(类型ObjectX)转换为Map s(或使用Camel注册适当的TypeConverter以自动执行此转换)
  • 如果您检查其他可用的数据格式,它们可能也有不同的要求

以下是使用bindy的一个非常简单的示例:

package mypackage;

@CsvRecord(separator = ",")
public Class MyPojo {
    @DataField(pos = 1) // first column in the CSV file
    private int foo;
    @DataField(pos = 2) // second column in the CSV file
    private String bar;
    // Plus constructors, accessors, etc.
}

// In the RouteBuilder :
DataFormat bindy = new BindyCsvDataFormat("mypackage");

from("...") // Message received as a List<MyPojo>
    .marshal(bindy)
    .to("ftp:...");