使用Spring集成,我想使用我的入站通道适配器扫描具有如下树结构的目录:
INDICATOR/
ref_1/
INPUTS/
ERRORS/
ref_2/
INPUTS/
ERRORS/
我的根目录将是INDICATOR
我想以递归方式扫描所有目录并获取所有文件,将其放在ERRORS
目录中。换句话说,如何拒绝或避免扫描此特定目录?
是否可以实现此类org.springframework.integration.file.RecursiveLeafOnlyDirectoryScanner
并添加特定的过滤器?
这是我的实际配置
<int-file:inbound-channel-adapter id="csvInputChannel"
directory="file:${directory.input}"
prevent-duplicates="false"
auto-startup="true"
auto-create-directory="false"
queue-size="1"
scanner="dirScanner">
<int:poller max-messages-per-poll="1" default="true" fixed-rate="1000" receive-timeout="5000" />
</int-file:inbound-channel-adapter>
<bean id="dirScanner"
class="org.springframework.integration.file.RecursiveLeafOnlyDirectoryScanner" />
实际上,我只能递归扫描所有目录中的所有文件,我不知道如何添加过滤器。
提前感谢任何提示。
答案 0 :(得分:2)
实际上,我并没有真正实现你自己的RecursiveLeafOnlyDirectoryScanner
:
public class SkipErrorDirRecursiveLeafOnlyDirectoryScanner extends RecursiveLeafOnlyDirectoryScanner {
protected File[] listEligibleFiles(File directory) throws IllegalArgumentException {
if (!"ERRORS".equals(directorygetName())) {
return super.listEligibleFiles(directory);
}
}
}
答案 1 :(得分:0)
我找到了更好的方法,我只是扩展DefaultDirectoryScanner
并使用此功能
public class SkipErrorDirRecursive extends DefaultDirectoryScanner{
protected File[] listEligibleFiles(File directory) throws IllegalArgumentException {
File[] rootFiles = directory.listFiles();
List<File> files = new ArrayList<File>(rootFiles.length);
for (File rootFile : rootFiles) {
if (rootFile.isDirectory()) {
if (!"ERRORS".equals(rootFile.getName()))
files.addAll(Arrays.asList(listEligibleFiles(rootFile)));
}
else {
files.add(rootFile);
}
}
return files.toArray(new File[files.size()]);
}
}