/* * To change this template, choose Tools | Templates * and open the template in the editor. */ package edu.mbl.jif.imaging.nav.util; import java.io.File; import java.io.FileFilter; import java.io.IOException; import java.util.ArrayList; import java.util.Collection; import java.util.Iterator; import java.util.List; import org.apache.commons.io.DirectoryWalker; import org.apache.commons.io.FileUtils; import org.apache.commons.io.filefilter.IOFileFilter; import org.apache.commons.io.filefilter.NameFileFilter; import org.apache.commons.io.filefilter.OrFileFilter; import org.apache.commons.io.filefilter.TrueFileFilter; import org.apache.commons.io.filefilter.WildcardFileFilter; /** * * @author GBH */ public class FileMgt { // Directories // private static final File current = new File("."); private static final File javaDir = new File("src/main/java"); private static final File orgDir = new File(javaDir, "org"); private static final File apacheDir = new File(orgDir, "apache"); private static final File commonsDir = new File(apacheDir, "commons"); private static final File ioDir = new File(commonsDir, "io"); private static final File outputDir = new File(ioDir, "output"); private static final File[] dirs = new File[]{orgDir, apacheDir, commonsDir, ioDir, outputDir}; // // // Files private static final File filenameUtils = new File(ioDir, "FilenameUtils.java"); private static final File ioUtils = new File(ioDir, "IOUtils.java"); private static final File proxyWriter = new File(outputDir, "ProxyWriter.java"); private static final File nullStream = new File(outputDir, "NullOutputStream.java"); private static final File[] ioFiles = new File[]{filenameUtils, ioUtils}; private static final File[] outputFiles = new File[]{proxyWriter, nullStream}; // // // Filters // We want to be able to filter for // folders like ../SM_*/*.tif // or any file like SM_* // protected File[] wildcardResolution(File f) { File dir = f.getParentFile(); FileFilter fileFilter = new WildcardFileFilter(f.getName()); return dir.listFiles(fileFilter); } public void method() { Iterator iterateFiles = FileUtils.iterateFiles( new File("."), new WildcardFileFilter("*.xml"), TrueFileFilter.INSTANCE); while (iterateFiles.hasNext()) { System.out.println(iterateFiles.next()); } } /** * Test Filtering and limit to depth 5 */ public void testFilterAndLimitD() { String topPath = ""; File topDir = new File(topPath); File[] dirs = new File[]{topDir}; IOFileFilter dirsFilter = createNameFilter(dirs); IOFileFilter iofilesFilter = createNameFilter(ioFiles); IOFileFilter outputFilesFilter = createNameFilter(outputFiles); IOFileFilter ioDirAndFilesFilter = new OrFileFilter(dirsFilter, iofilesFilter); IOFileFilter dirsAndFilesFilter = new OrFileFilter(ioDirAndFilesFilter, outputFilesFilter); //IOFileFilter outputFilesFilter = createNameFilter(outputFiles); List<File> results = new TestFileFinder(dirsAndFilesFilter, 5).find(javaDir); List<File> resultFiles = filesOnly(results); List<File> resultDirs = directoriesOnly(results); // assertEquals("[D] Result Size", 1 + dirs.length + ioFiles.length, results.size()); for (File f : resultFiles) { //System.out.println(f.getAbsolutePath() + " : " + f.getParent() + " " + f.getName()); System.out.println(f.getParent() + "\\" + f.getName()); } for (File f : resultDirs) { //System.out.println(f.getAbsolutePath() + " : " + f.getParent() + " " + f.getName()); System.out.println(f.getParent() + "\\" + f.getName()); } // assertTrue("[D] Start Dir", results.contains(javaDir)); // checkContainsFiles("[D] Dir", dirs, results); // checkContainsFiles("[D] File", ioFiles, results); } /** * Test separate dir and file filters */ public void testFilterDirAndFile1() { String topPath = ""; File topDir = new File(topPath); File[] dirs = new File[]{topDir}; IOFileFilter dirsFilter = createNameFilter(dirs); File[] files = new File[]{filenameUtils, ioUtils}; IOFileFilter filesFilter = createNameFilter(files); //WildcardFileFilter wildFilter = new WildcardFileFilter(null); List<File> results = new TestFileFinder(dirsFilter, filesFilter, -1).find(javaDir); // assertEquals("[DirAndFile1] Result Size", 1 + dirs.length + ioFiles.length, results.size()); // assertTrue("[DirAndFile1] Start Dir", results.contains(javaDir)); // checkContainsFiles("[DirAndFile1] Dir", dirs, results); // checkContainsFiles("[DirAndFile1] File", ioFiles, results); } /** * Extract the directories. */ private List<File> directoriesOnly(Collection<File> results) { List<File> list = new ArrayList<File>(results.size()); for (File file : results) { if (file.isDirectory()) { list.add(file); } } return list; } /** * Extract the files. */ private List<File> filesOnly(Collection<File> results) { List<File> list = new ArrayList<File>(results.size()); for (File file : results) { if (file.isFile()) { list.add(file); } } return list; } /** * Create an name filter containg the names of the files in the array. */ private static IOFileFilter createNameFilter(File[] files) { String[] names = new String[files.length]; for (int i = 0; i < files.length; i++) { names[i] = files[i].getName(); } return new NameFileFilter(names); } //=============================== /** * Test DirectoryWalker implementation that finds files in a directory hierarchy applying a file * filter. */ private static class TestFileFinder extends DirectoryWalker<File> { protected TestFileFinder(FileFilter filter, int depthLimit) { super(filter, depthLimit); } protected TestFileFinder(IOFileFilter dirFilter, IOFileFilter fileFilter, int depthLimit) { super(dirFilter, fileFilter, depthLimit); } /** * find files. */ protected List<File> find(File startDirectory) { List<File> results = new ArrayList<File>(); try { walk(startDirectory, results); } catch (IOException ex) { //Assert.fail(ex.toString()); } return results; } /** * Handles a directory end by adding the File to the result set. */ @Override protected void handleDirectoryEnd(File directory, int depth, Collection<File> results) { results.add(directory); } /** * Handles a file by adding the File to the result set. */ @Override protected void handleFile(File file, int depth, Collection<File> results) { results.add(file); } } public static void main(String[] args) { } }