2016-06-23 53 views
0

我想将zip文件解压到名为zip文件的文件夹。例如。原/ abc.zip应解压缩到导入/ abc/在zip文件夹中使用骆驼解压缩文件

我现在所做的解压缩指定文件夹中的文件。

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

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

我是新来的骆驼,所以任何帮助将被认为。谢谢!

回答

3

这条路线从提取的收件箱文件夹压缩文件的背景下,以发件箱文件夹,在父母的名字是提取zip文件的名称的父文件夹。我认为它涵盖了你的所有要求。

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

一些注意事项:在端点

  1. 字符串连接不好看,这是 容易出错。对于我从F使用的消费者,并且作为第二个 参数,我给出收件箱文件夹。您可以从一个常数值中获取它。目录不得包含具有$ {}占位符的动态表达式。
  2. 你不需要.convertBodyTo(String.class)
  3. 对于生产者我用toD,它从一个属性中获取发件箱文件夹。查看详情这里https://camel.apache.org/properties.html。你可以加一个属性的资源文件夹(Maven项目的src/main /资源)文件并加载它们在这样的骆驼(在Java DSL routebuilder)

    PropertiesComponent pc = new PropertiesComponent(); pc.setLocation("classpath:application.properties"); getContext().addComponent("properties”,PC)

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

0

对于从生产者到消费者复制文件路径,可以使用file language

喜欢的东西

from("file:" + "</path/to/original>" + "?noop=true").noAutoStartup().routeId("xxx").split(new ZipSplitter()).streaming() 
      .convertBodyTo(String.class).to("$simple{file:path}")); 

用于过滤基于文件名(最初基于文件名回答过滤): - 您可以使用filter

喜欢的东西

from("file:" + "</path/to/original>" + "?noop=true").noAutoStartup().routeId("xxx").fileFilter($org.apache.camel.Exchange.FILE_NAME.contains("xyz")).split(new ZipSplitter()).streaming() 
      .convertBodyTo(String.class).to("file:" + "</path/to/import>"); 

另外,骆驼允许在文件名称本身的正则表达式。 所以,你可以使用类似

from("file:" + "</path/to/original>" + "regex pattern in file name" + "?noop=true").noAutoStartup().routeId("xxx").split(new ZipSplitter()).streaming() 
      .convertBodyTo(String.class).to("file:" + "</path/to/import>"); 
+0

谢谢你的回答!也许我的问题还不够清楚:我想要做的就是这样的:'from(“file:”+“”+“?noop = true”)。noAutoStartup()。 routeId(“xxx”)。split(new ZipSplitter())。streaming() .convertBodyTo(String.class).to(“file:”+“”+ );' –

0

如果你看看http://camel.apache.org/file2.html你会看到,骆驼文件组件设置一些头。尝试类似

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