3

尝试使用 Apache Camel 解压缩文件,我尝试了http://camel.apache.org/zip-file-dataformat.html中给出的示例,但我找不到UnZippedMessageProcessor类。这是代码:

import java.util.Iterator;
import org.apache.camel.builder.RouteBuilder;
import org.apache.camel.dataformat.zipfile.ZipFileDataFormat;

public class TestRoute extends RouteBuilder {

@Override
public void configure() throws Exception {

    ZipFileDataFormat zipFile = new ZipFileDataFormat();
    zipFile.setUsingIterator(true);
    from("file:src/test/resources/org/apache/camel/dataformat/zipfile/")
            .unmarshal(zipFile).split(body(Iterator.class)).streaming()
            .process(new UnZippedMessageProcessor()).end();

}
}

有人尝试过这样做或有其他方法通过骆驼路线解压缩文件吗?

先感谢您!

4

2 回答 2

6

您也可以像这样定义路由,您可以在 camel-zipfile中找到ZipSplitter 。

 from("file:src/test/resources/org/apache/camel/dataformat/zipfile?consumer.delay=1000&noop=true")
  .split(new ZipSplitter())
  .streaming().convertBodyTo(String.class).to("mock:processZipEntry")
  .end()
于 2013-07-25T03:26:15.423 回答
1

如果文档不是那么稀疏,这将更容易弄清楚。首先,就像其他人提到的那样,文档假设您将编写自己的Processor实现。一个简单的看起来像这样:

public class ZipEntryProcessor implements Processor {

    @Override
    public void process(Exchange exchange) throws Exception {
        System.out.println(exchange.getIn().getBody().toString());
    }

}

如果您调试该process方法,您将看到输入消息的主体是 type ZipInputStreamWrapper,它扩展了 Java 类BufferedInputStream。这是有用的信息,因为它告诉您可能可以使用 Camel 的内置数据转换,这样您就不必编写自己的处理器。

因此,以下是您使用 zip 文件并将其所有条目提取到文件系统上的目录的方式:

from("file:src/test/resources/org/apache/camel/dataformat/zipfile/")
            .split(new ZipSplitter())
                .streaming()
                .to("file://C:/Temp/")
                .end();

这实际上非常简单。此外,您还必须确保正确理解文件组件 URI 语法。那是最让我绊倒的。这是一篇关于该主题的优秀博客文章。

于 2018-07-10T21:13:46.333 回答