我要将特定的文件从本地文件夹发送到FTP,此文件夹包含不同的csv文件,我只想发送特定的文件。这是我正在使用的代码,但这将发送此文件夹中的所有CSV文件,如何查看是否存在此特定文件,例如“ foo.csv”,如果存在,则将其发送到FTP
public IntegrationFlow localToFtpFlow(Branch myBranch){
return IntegrationFlows.from(Files.inboundAdapter(new File(myBranch.getBranchCode()))//.patternFilter("final" + myBranch.getBranchCode() +".csv")
.filter(new ChainFileListFilter<File>()
.addFilter(new RegexPatternFileListFilter("final" + myBranch.getBranchCode() +".csv"))
.addFilter(new FileSystemPersistentAcceptOnceFileListFilter(new SimpleMetadataStore(), "foo"))),
//.filter(new FileSystemPersistentAcceptOnceFileListFilter(new SimpleMetadataStore(), "foo")),
e -> e.poller(Pollers.fixedDelay(10_000)))
.log()
.handle(Ftp.outboundAdapter(createNewFtpSessionFactory(myBranch), FileExistsMode.REPLACE)
.useTemporaryFileName(true)
.autoCreateDirectory(true)
.remoteDirectory(myBranch.getFolderPath()))
.get();
}
我尝试如下所示添加patterfilter或regexfilter,但出现错误。
IntegrationFlows.from(Files.inboundAdapter(new File(myBranch.getBranchCode())).patternFilter("final" + myBranch.getBranchCode() +".csv")
运行时出错。
The 'filter' reference is mutually exclusive with either the 'filename-pattern' or 'filename-regex' attribute.
试图寻找解决方案,但找不到清晰的解决方案。
答案 0 :(得分:0)
当您需要在Files.inboundAdapter()
上配置多个过滤器时,需要考虑使用CompositeFileListFilter
或ChainFileListFilter
。将ChainFileListFilter
和SimplePatternFileListFilter
组合成一个,并将复合过滤器注入该.filter()
选项。
.patternFilter()
和.regexFilter()
在这里是为了方便起见,它们实际上与.filter()
是互斥的。
在文档中查看有关撰写的更多信息:https://docs.spring.io/spring-integration/docs/current/reference/html/files.html#file-reading