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

在名为like zip file的文件夹中使用camel解压文件

楮景明
2023-03-14

我想把一个zip文件解压到一个叫做like the zip file的文件夹中。例如:原件/abc。zip应解压缩以导入/abc/

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

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个答案

祁建业
2023-03-14

为了将文件路径从生产者复制到消费者,可以使用文件语言。

差不多

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

(最初根据文件名进行过滤)

用于基于文件名的过滤:-您可以使用过滤器

差不多

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>");

此外,camel允许在文件名中使用regex。所以你可以用

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>");
许涵容
2023-03-14

如果您查看http://camel.apache.org/file2.html您会看到camel文件组件设置了一些标头。尝试类似的东西

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

路由将zip文件的上下文从收件箱文件夹提取到发件箱文件夹,在父文件夹中,父名称是提取的zip文件的名称。我想它能满足你的所有要求。

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

注意:

>

你不需要. vertBodyTo(String.class)

对于制作人,我使用了toD,它从属性中取出outbox文件夹。详见此处https://camel.apache.org/properties.html。您可以在resources文件夹中添加一个属性文件(src/main/resources,用于maven项目),然后像这样(在java dsl routebuilder中)在camel中加载它们

PropertiesComponent pc=new PropertiesComponent();pc.setLocation(“classpath:application.properties”);getContext()。addComponent(“属性”,pc)

最后是最重要的,你必须利用文件语言,并使用file: onlyname: noext.来获取没有扩展名的原始zip文件名。在你的情况下abc.这里的详细信息:https://camel.apache.org/file-language.html

 类似资料:
  • 问题内容: 我尝试解压缩150个zip文件。所有zip文件都使用不同的名称,它们都分散在一个大文件夹中,该文件夹分为许多子文件夹和子子文件夹。我想将每个存档提取到与原始zip文件名相同名称的单独文件夹中,与原始zip文件位于同一位置。我的代码是: 我运行代码后,什么都没有发生。在此先感谢您的任何帮助。 问题答案: 更新: 最后,这段代码对我有用:

  • 问题内容: 尝试使用Apache Camel解压缩文件时,我尝试了http://camel.apache.org/zip-file- dataformat.html中 给出的示例,但找不到 UnZippedMessageProcessor 类。这是代码: 是否有人尝试这样做或通过骆驼路线将文件解压缩? 先感谢您! 问题答案: 您也可以像这样定义路由,可以在camel-zipfile中找到 ZipS

  • 我使用filter和sortBy的想法失败了,因为它不能一次轮询所有文件。 也许这不是Camel需要解决的问题,但由于它已经知道如何通过SFTP连接和删除文件,所以我想重用它的功能。

  • 首先,我没有看到任何其他问题可以“直接”帮助我解决问题,这就是为什么我决定创建一个新的问题。 以下代码被编程为解压缩多个文件和文件夹。 这段代码工作正常,但有一个重要的错误:它解压缩文件夹,但不是像这样显示它们: 文件1。txt 它显示了这一点: file1.txt file2.txt file3.txt file4.txt file5.txt file6.txt 我做错了什么?

  • 这是我的全部剧本。除了最后2行之外,所有的内容都用于查找压缩的PDF文件并移动它们。 在第一部分中,脚本检查文件夹中每个pdf文件的前几个字节。如果它们以“pk*”开头,它们是zip文件,并被移动到zipped文件夹中。对于每个PDF/ZIP文件,在它旁边的文件夹中有一个关联的HL7文件。 这些也需要移动到同一个文件夹。从那里,zip文件需要解压缩并重新定位到“unzipped” 所以我需要找到一

  • 问题内容: 我正在尝试压缩包含子文件夹的文件夹。尝试压缩名为10-18-2010_4D的文件夹。以上程序以以下异常结束。请提供有关如何解决此问题的建议。 问题答案: 您需要检查文件是否为目录,因为您无法将目录传递给zip方法。 看一下该页面,该页面显示了如何递归压缩给定目录。