2014-09-24 17 views
0

使用Spring的集成,我想用我的入站通道適配器掃描目錄以樹狀結構是這樣的:如何避免在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" /> 

其實,我只能掃描存在的所有文件中的所有目錄遞歸,我不thave線索如何添加過濾器。

在此先感謝您的任何提示。

回答

2

其實我並不真正的問題,以實現自己的RecursiveLeafOnlyDirectoryScanner

public class SkipErrorDirRecursiveLeafOnlyDirectoryScanner extends RecursiveLeafOnlyDirectoryScanner { 

    protected File[] listEligibleFiles(File directory) throws IllegalArgumentException { 
     if (!"ERRORS".equals(directorygetName())) { 
      return super.listEligibleFiles(directory); 
     } 
    } 

} 
+0

謝謝,並不真正有效,但它可以幫助我走上正確的道路!見下文 – TheCyberXP 2014-09-24 11:53:50

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()]); 
    } 
}