配置FtpOutboundGateway时无法排除指定文件,请求技术支持
问题解决:FTP下载排除.doc(含大写DOC)文件
你的问题出在两个核心点:
- 过滤器类型误用:
FtpSimplePatternFileListFilter仅支持Ant风格通配符(比如*.txt),不支持正则表达式,你写的正则字符串会被当成Ant模式解析,自然无法生效。 - 正则表达式本身不严谨:即便换成正则过滤器,原表达式
^(?!.DOC$)也只能排除文件名恰好是.DOC的文件(注意.是正则的任意字符匹配,不是字面量的点),无法覆盖test.DOC这类带前缀的文件,也没包含小写.doc的情况。
正确解决方案
替换过滤器为RegexPatternFileListFilter(专门处理正则的文件过滤器),并使用精准的正则排除所有以.doc(大小写不敏感)结尾的文件:
@Bean @ServiceActivator(inputChannel = "fetch") public FtpOutboundGateway gateway() { FtpOutboundGateway gateway = new FtpOutboundGateway(sessionFactory(), "mget", "payload"); gateway.setOptions("-R"); gateway.setLocalDirectory(new File("/local/dir")); // 正则过滤器:排除所有以.doc/Doc/DOC等大小写形式结尾的文件 gateway.setFilter(new RegexPatternFileListFilter("^(?!.*\\.(?i)doc$).*")); gateway.setRemoteDirectoryExpression(new LiteralExpression("/remote/dir")); return gateway; }
正则表达式说明
^(?!.*\\.(?i)doc$).* 各部分作用:
(?i):开启不区分大小写模式,同时匹配doc/Doc/DOC等所有大小写组合.*\\.(?i)doc$:匹配任意字符开头、以.doc(大小写不敏感)结尾的文件(?!...):正向否定预查,直接排除上述匹配到的文件- 整个表达式最终匹配所有不以
.doc(任意大小写)结尾的文件
内容的提问来源于stack exchange,提问作者asker
相关产品推荐
相关产品推荐

