代码之家  ›  专栏  ›  技术社区  ›  AlgorithmFromHell

camel from smb-组合“delete=true”和按文件名筛选

  •  0
  • AlgorithmFromHell  · 技术社区  · 5 年前

    我需要将文件从扩展名A转换为仅匹配特定文件名的B,处理时应删除具有原始扩展名的文件。但是,不应删除目录中的其他文件。我使用的是ApacheCamel2.17.2(不幸的是,无法升级到新版本)。

    我试着把 delete=true 与文件筛选器一起标记,但它会删除所有文件,即使筛选器工作正常。

    from("smb://myDirectory?delete=true&password=xxxxxx&username=zzzz"). .filter(PredicateBuilder.and(header(Exchange.FILE_NAME).startsWith("Report"), PredicateBuilder.not(header(Exchange.FILE_NAME).endsWith("zip"))))

    此解决方案首先将原始文件转换为我所需的格式,不会像预期的那样再次转换转换文件,但它还会删除转换后的文件,因为 删除=真 根据我的理解,标志优先于筛选器。

    我还尝试将所有这些都放入路线参数中:

    from("smb://myDirectory?delete=true&fileName=Report*.csv&password=xxxxxx&username=zzzz")

    但是regex不匹配-我不明白为什么-而且我认为问题可能是相同的,即使我可以让regex工作。文件名示例是 Report_Financial_20190201.csv .

    我现在唯一能想到的就是 .choice().when() 条件,它将检查文件名和扩展名,并将其转换或不转换并将其放入目标文件夹…这可能会导致一个无休止的循环,通常看起来像一个可怕的黑客。

    对这个问题的建议方法是什么? 注意:由于需求限制,我不能使用临时文件夹或类似的文件夹。

    1 回复  |  直到 5 年前
        1
  •  1
  •   AlgorithmFromHell    5 年前

    实际上,这些标志可以组合在一起。我只需要使用 include 选项而不是 filename . 这个答案帮助我: HOW: Apache Camel, Regex match files 我的端点现在如下所示:

    from("smb://myDirectory?delete=true&include=Report.*\\.csv&password=xxxxxx&username=zzzz")