gpt4 book ai didi

java - FtpInboundFileSynchronizer - 设置过滤器未按预期工作

转载 作者:行者123 更新时间:2023-12-01 17:32:01 25 4
gpt4 key购买 nike

我有一个子方法来构建我的 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com