FtpInboundFileSynchronizer

FtpInboundFileSynchronizer

我有一个构建我的FtpInboundFileSynchronizer对象的子方法。 (从超出范围的工厂对象生成)

private FtpInboundFileSynchronizer createFtpInboundFileSynchronizer(SessionFactory<FTPFile> factory) {
        var synchronizer = new FtpInboundFileSynchronizer(factory);
        CompositeFileListFilter filter = new CompositeFileListFilter<>();
        filter.addFilter(new FtpSimplePatternFileListFilter("filename1.txt"));
        filter.addFilter(new FtpSimplePatternFileListFilter("filename2.txt"));
        synchronizer.setFilter(filter);
        synchronizer.setRemoteDirectory(ftpConfiguration.getPath());
        synchronizer.setDeleteRemoteFiles(false);
        return synchronizer;
    }


但是,在这种情况下,我没有任何文件。如果删除FTPSimplePAtternFileListFilter实例之一,它将正确地从FTP服务器检索该一个文件名。

目的是仅下载完整文件名(包括名称和扩展名)的预定义列表。
我似乎无法全神贯注于如何执行此操作。有人能帮忙吗?

最佳答案

import java.util.Arrays;
import org.apache.commons.net.ftp.FTPFile;
import org.springframework.integration.file.filters.AbstractDirectoryAwareFileListFilter;
import org.springframework.util.AntPathMatcher;

/**
 * Filter to accept specific file name list.
 */
public class MultiPatternFileListFilter extends AbstractDirectoryAwareFileListFilter<FTPFile> {

    private final AntPathMatcher matcher = new AntPathMatcher();
    private String[] patterns;

    public MultiPatternFileListFilter(String... patterns) {
        this.patterns = patterns;
    }

    @Override
    public boolean accept(FTPFile file) {
        return alwaysAccept(file) || (file != null && this.matchesAnyPattern(file));
    }

    @Override
    protected boolean isDirectory(FTPFile file) {
        return false;
    }

    protected String getFilename(FTPFile file) {
        return (file != null) ? file.getName() : null;
    }

    private boolean matchesAnyPattern(FTPFile file) {
        return Arrays.stream(patterns).anyMatch(pattern -> this.matcher.match(pattern, this.getFilename(file)));
    }
}


这解决了我的问题。

关于java - FtpInboundFileSynchronizer-设置过滤器无法按预期工作,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/61101822/

10-13 09:07