package com.javaeasy.fileiterator; import java.io.File; import java.util.ArrayList; import java.util.Iterator; import java.util.List; public class FileSysIterator { public List<ProcessFileSysItemIF> processors = new ArrayList<ProcessFileSysItemIF>(); private FileSysIterator(List<ProcessFileSysItemIF> processors) { this.processors = processors; } public static FileSysIterator createInstance( List<ProcessFileSysItemIF> processors) { if (processors == null || processors.size() == 0) { return null; } return new FileSysIterator(processors); } public void runFileIterator() { File theRootFolder = RootFolderSelector.getRootFolder(); if (theRootFolder == null) { System.out.println("Program Exit!"); System.exit(0); } for (Iterator<ProcessFileSysItemIF> processorsIt = processors .iterator(); processorsIt.hasNext();) { ProcessFileSysItemIF processor = processorsIt.next(); processor.initProcessor(theRootFolder); } List<File> rootFolders = new ArrayList<File>(); rootFolders.add(theRootFolder); while (rootFolders.size() > 0) { List<File> nextGenRootList = new ArrayList<File>(); for (Iterator<File> rootFoldersIt = rootFolders.iterator(); rootFoldersIt .hasNext();) { File curFolder = rootFoldersIt.next(); File[] folders = FileSysIteratorUtils .findAllFoldersInFolder(curFolder); for (int i = 0; i < folders.length; i++) { nextGenRootList.add(folders[i]); } for (Iterator<ProcessFileSysItemIF> processorsIt = processors .iterator(); processorsIt.hasNext();) { ProcessFileSysItemIF processor = processorsIt.next(); processor.preProcessFolder(curFolder); String[] extensions = processor.getProcessFileExtentions(); String[] fileNames = processor.getProcessFileNames(); File[] processFiles = FileSysIteratorUtils .findAllFilesInFolder(curFolder, extensions,fileNames); for (int curFileIdx = 0; curFileIdx < processFiles.length; curFileIdx++) { processor.preProcessFile(processFiles[curFileIdx]); processor.processFile(processFiles[curFileIdx]); processor.postProcessFile(processFiles[curFileIdx]); } processor.postProcessFolder(curFolder); } } rootFolders.clear(); rootFolders = nextGenRootList; } for (Iterator<ProcessFileSysItemIF> processorsIt = processors .iterator(); processorsIt.hasNext();) { ProcessFileSysItemIF processor = processorsIt.next(); processor.done(); } System.exit(0); } }