package fileWalker; import java.io.File; import java.io.IOException; import java.nio.file.Path; import java.util.Arrays; import java.util.LinkedList; import java.util.List; public class OrderedWalker extends SourceFileWalker { FileNameMatcher matcher = new FileNameMatcher(); List<SourceFileListener> listeners = new LinkedList<SourceFileListener>(); public OrderedWalker() { setFilenameFilter(DEFAULT_FILENAME_FILTER); } @Override public void setFilenameFilter(String filter) { matcher.setFilenameFilter(filter); } @Override public void addListener(SourceFileListener listener) { listeners.add(listener); } @Override protected void walkExistingFileOrDirectory(String dirOrFileName) throws IOException { walk(dirOrFileName); } private void walk(String dirOrFileName) { File file = new File(dirOrFileName); File[] dirContent = file.listFiles(); Path path = file.toPath(); // if this is not a directory if(dirContent == null) return; Arrays.sort(dirContent); reportDirectoryEnter(path); for(File f : dirContent){ Path filePath = f.toPath(); String absolutePath = f.getAbsolutePath(); if(f.isDirectory()){ walk(absolutePath); continue; } if(matcher.fileMatches(filePath)) reportFile(filePath); } reportDirectoryLeave(path); } private void reportDirectoryEnter(Path path) { for(SourceFileListener listener: listeners ) listener.preVisitDirectory(path); } private void reportDirectoryLeave(Path path) { for(SourceFileListener listener: listeners ) listener.postVisitDirectory(path); } private void reportFile(Path path) { for(SourceFileListener listener: listeners ) listener.visitFile(path); } }