我需要将文件从扩展名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()
条件,它将检查文件名和扩展名,并将其转换或不转换并将其放入目标文件夹…这可能会导致一个无休止的循环,通常看起来像一个可怕的黑客。
对这个问题的建议方法是什么?
注意:由于需求限制,我不能使用临时文件夹或类似的文件夹。