Pages

Thursday, March 1, 2012

[Java] Recursive listFiles with filter

 /** original: http://snippets.dzone.com/posts/show/1875
*
*    
*    modified by Spencer, Mar. 1, 2012
*    overload member function listfiles: directory name and extension are also acceptable.
*/
import java.io.*;
import java.util.*;
public class FileRecursor
{
public static File[] listFilesAsArray(
        File directory,
        FilenameFilter filter,
        boolean recurse)
{
    Collection<File> files = listFiles(directory,
            filter, recurse);
//Java4: Collection files = listFiles(directory, filter, recurse);
   
    File[] arr = new File[files.size()];
    return files.toArray(arr);
}

public static File[] listFilesAsArray(
        final String sDirectory,
        final String sFilter,
        boolean recurse)
{
    File directory = new File(sDirectory);
    FilenameFilter filter = new FilenameFilter()
    {
        public boolean accept(File dir, String name)
        {
             return name.endsWith(sFilter);
         }
    };
    Collection<File> files = listFiles(directory,
            filter, recurse);
//Java4: Collection files = listFiles(directory, filter, recurse);
   
    File[] arr = new File[files.size()];
    return files.toArray(arr);
}

public static Collection<File> listFiles(
// Java4: public static Collection listFiles(
        File directory,
        FilenameFilter filter,
        boolean recurse)
{
    // List of files / directories
    Vector<File> files = new Vector<File>();
// Java4: Vector files = new Vector();
   
    // Get files / directories in the directory
    File[] entries = directory.listFiles();
   
    // Go over entries
    for (File entry : entries)
    {
// Java4: for (int f = 0; f < files.length; f++) {
// Java4:     File entry = (File) files[f];

        // If there is no filter or the filter accepts the
        // file / directory, add it to the list
        if (filter == null || filter.accept(directory, entry.getName()))
        {
            files.add(entry);
        }
       
        // If the file is a directory and the recurse flag
        // is set, recurse into the directory
        if (recurse && entry.isDirectory())
        {
            files.addAll(listFiles(entry, filter, recurse));
        }
    }
   
    // Return collection of files
    return files;       
}
}

////////////

Example:     
//list the .java files under the current directory
File[] filelist = new FileRecursor().listFilesAsArray("./" ,".java", true);
for(File f:filelist)
   System.out.println(f.getName());

No comments:

Post a Comment