Я передаю файлы с удаленного на локальный по Sftp для обработки. Я хочу передавать только файлы .csv, и у меня есть список предопределенных имен файлов.
Я не смог найти FileListFilter, который позволяет указать несколько шаблонов и передать, если хотя бы один совпал.
Пока у меня есть этот код, который работает для фильтрации «.csv».
Процесс интеграции
@Bean
public IntegrationFlow integFlow() {
return IntegrationFlows
.from(ftpMessageSource(), c -> poller())
... more processing
Источник сообщения
public MessageSource<File> ftpMessageSource() {
SftpInboundFileSynchronizer fileSynchronizer = new SftpInboundFileSynchronizer(sessionFactory);
fileSynchronizer.setRemoteDirectory(remoteDirectory);
fileSynchronizer.setDeleteRemoteFiles(true);
fileSynchronizer.setFilter(new SftpRegexPatternFileListFilter(Constantes.EXTENSION));
SftpInboundFileSynchronizingMessageSource ftpInboundFileSync =
new SftpInboundFileSynchronizingMessageSource(fileSynchronizer);
ftpInboundFileSync.setLocalDirectory(new File(workDirectory));
ftpInboundFileSync.setAutoCreateLocalDirectory(true);
CompositeFileListFilter<File> compositeFileListFilter = new CompositeFileListFilter<>();
compositeFileListFilter.addFilter(new RegexPatternFileListFilter(Constantes.EXTENSION));
ftpInboundFileSync.setLocalFilter(compositeFileListFilter);
return ftpInboundFileSync;
}
Constantes.EXTENSION — это регулярное выражение, принимающее файлы .csv и .CSV. Это прекрасно работает.
Скажем, у меня есть список String, который содержит "string1", "string2", "string3", и я хочу передать каждый файл формы string1*, string2* или string3*. Как мне поступить?