我定义了一个SftpInboundFileSynchronizer类。我想过滤远程文件,这是csv和txt文件的唯一。文件扩展名数组具有*.csv和*.txt值。
SftpInboundFileSynchronizer fileSynchronizer = new
SftpInboundFileSynchronizer(sftpSessionFactory());
PathPatternParser pp = new PathPatternParser();
PathPattern pattern = null;
for(String fileExtension: fileExtensionArray) {
if(pattern == null) {
pattern = pp.parse(fileExtension);
} else {
pattern.combine(pp.parse(fileExtension));
}
}
fileSynchronizer.setFilter(new
SftpSimplePatternFileListFilter(pattern.getPatternString()));以上抛出以下异常
java.lang.IllegalArgumentException: Cannot combine patterns: *.csv and *.txt如何修复此错误?
谢谢
发布于 2021-07-15 13:21:08
顾名思义,PathPattern.combine方法将组合这些模式。基本上是让它成为一个and。文件永远不能以.txt和.csv结尾。一定是or。afaik,您不能用PathPattern来实现这一点。
但是,使用正则表达式是相当容易做到的。附带了一个组件,可以为您处理这个问题。您可以使用SftpRegexPatternFileListFilter而不是SftpSimplePatternFileListFilter。
SftpRegexPatternFileListFilter filter = new SftpRegexPatternFileListFilter ("(?i)^.*\\.(csv|txt)$");上面的表达式应该可以工作(我不是正则表达式的专家,所以它可能需要一些工作)。
https://stackoverflow.com/questions/68388621
复制相似问题