在名为 zip-file 的文件夹中使用骆驼解压缩文件

mar*_*ill 0 java zip apache-camel

我想将一个 zip 文件解压缩到一个名为 zip 文件的文件夹中。例如 original/abc.zip 应该解压到 import/abc/

我现在所拥有的确实解压缩了指定文件夹中的文件。

from("file:" + "</path/to/original>" + "?noop=true").noAutoStartup().routeId("xxx").split(new ZipSplitter()).streaming()
            .convertBodyTo(String.class).to("file:" +  "</path/to/import>");
Run Code Online (Sandbox Code Playgroud)

如何从“from”文件中获取文件名并将其放入“to”部分?

我是骆驼的新手,所以任何帮助都会受到欢迎。谢谢!

lts*_*las 6

此路由将 zip 文件的上下文从收件箱文件夹提取到发件箱文件夹,在父文件夹中,父文件夹的名称是提取的 zip 文件的名称。我认为它涵盖了您的所有要求。

  fromF("file:%s?noop=true","inbox")
     .split(new ZipSplitter())
     .streaming()
     .toD("file:{{my.outbox}}/${file:onlyname.noext}/");
Run Code Online (Sandbox Code Playgroud)

一些注意事项:

  1. 端点中的字符串连接看起来不太好,而且很容易出错。对于消费者,我使用了 fromF,作为第二个参数,我提供了收件箱文件夹。您可以从一个常量值中获取它。目录不得包含带有 ${ } 占位符的动态表达式。

  2. 你不需要 .convertBodyTo(String.class)

  3. 对于生产者,我使用 toD 从属性中获取发件箱文件夹。在此处查看详细信息https://camel.apache.org/properties.html。您可以在资源文件夹中添加一个属性文件(maven 项目的 src/main/resources)并像这样在骆驼中加载它们(在 java dsl 中)路线建设者)

    PropertiesComponent pc = new PropertiesComponent(); pc.setLocation("classpath:application.properties"); getContext().addComponent("properties“, 个人电脑)

  4. 最后最重要的是,您必须利用文件语言并使用 file:onlyname:noext。获取不带扩展名的原始 zip 文件名。在你的情况下 abc。详情请见:https : //camel.apache.org/file-language.html