配置 FtpOutboundGateway 时无法从下载列表中排除文件

问题描述 投票:0回答:1

我正在尝试过滤从 FTP 下载的文件。例如,我想从下载列表中排除扩展名为“.doc”的文件。但我的正则表达式“^(?!.DOC$)”不起作用。你能帮我解决这个麻烦吗?

@Bean
@ServiceActivator(inputChannel = "fetch")
public FtpOutboundGateway gateway() {
    FtpOutboundGateway gateway = new FtpOutboundGateway(sessionFactory(), "mget", "payload");
    gateway.setOptions("-R");
    gateway.setLocalDirectory(new File("/local/dir"));
    gateway.setFilter(new FtpSimplePatternFileListFilter("^(?!.DOC$)"));
    gateway.setRemoteDirectoryExpression(new LiteralExpression("/remote/dir"));
    return gateway;
}
java spring integration boot outbound
1个回答
0
投票

问题出在正则表达式上。你的只会拒绝以任何字符开头并以“DOC”结尾(区分大小写)的 4 字符长字符串。

这将实现你想要的:

^.*(?<!(\.doc|\.DOC))$

让我们看看它的作用:

  1. .*
    匹配任何长度的任何字符序列。
  2. (\.doc|\.DOC)
    将在文件名末尾查找
    .doc
    .DOC
    。请注意
    \.
    ,它的意思是字面的
    .
    字符。默认情况下
    .
    表示正则表达式中的“任何字符”,因此必须使用反斜杠进行转义。
  3. (?<! ... )
    放在
    $
    之前是行尾的负向后查找,因此它仅拒绝没有该扩展名的文件。
© www.soinside.com 2019 - 2024. All rights reserved.