Package org.apache.commons.io.filefilter
This package defines an interface (IOFileFilter) that combines both
FileFilter and FilenameFilter. Besides
that the package offers a series of ready-to-use implementations of the
IOFileFilter interface including implementation that allow you to combine
other such filters.
These filter can be used to list files or in FileDialog,
for example.
| DirectoryFilter | Only accept directories |
| PrefixFileFilter | Filter based on a prefix |
| SuffixFileFilter | Filter based on a suffix |
| NameFileFilter | Filter based on a filename |
| WildcardFileFilter | Filter based on wildcards |
| AgeFileFilter | Filter based on last modified time of file |
| SizeFileFilter | Filter based on file size |
| TrueFileFilter | Accept all files |
| FalseFileFilter | Accept no files |
| NotFileFilter | Applies a logical NOT to an existing filter |
| AndFileFilter | Combines two filters using a logical AND |
| OrFileFilter | Combines two filter using a logical OR |
Using Classic IO
These boolean FilenameFilters can be nested, to allow arbitrary expressions. For example, here is how one could print all non-directory files in the current directory, starting with "A", and ending in ".java" or ".class":
File dir = new File(".");
String[] files = dir.list(
new AndFileFilter(
new AndFileFilter(
new PrefixFileFilter("A"),
new OrFileFilter(
new SuffixFileFilter(".class"),
new SuffixFileFilter(".java")
)
),
new NotFileFilter(
new DirectoryFileFilter()
)
)
);
for (int i=0; i<files.length; i++) {
System.out.println(files[i]);
}
You can alternatively build a filter tree using the "and", "or", and "not" methods on filters themselves:
File dir = new File(".");
String[] files = dir.list(
new AndFileFilter(
new PrefixFileFilter("A").and(
new SuffixFileFilter(".class").or(new SuffixFileFilter(".java"))),
new DirectoryFileFilter().not()
)
);
for (int i=0; i<files.length; i++) {
System.out.println(files[i]);
}
This package also contains a utility class: FileFilterUtils. It allows you to use all file filters without having to put them in the import section. Here's how the above example will look using FileFilterUtils:
File dir = new File(".");
String[] files = dir.list(
FileFilterUtils.andFileFilter(
FileFilterUtils.andFileFilter(
FileFilterUtils.prefixFileFilter("A"),
FileFilterUtils.orFileFilter(
FileFilterUtils.suffixFileFilter(".class"),
FileFilterUtils.suffixFileFilter(".java")
)
),
FileFilterUtils.notFileFilter(
FileFilterUtils.directoryFileFilter()
)
)
);
for (int i=0; i<files.length; i++) {
System.out.println(files[i]);
}
Using NIO
You can combine Java file tree walking by using java.nio.file.Files.walk() APIs with filters:
final Path dir = Paths.get("");
// We are interested in files older than one day
final long cutoff = System.currentTimeMillis() - (24 * 60 * 60 * 1000);
final AccumulatorPathVisitor visitor = AccumulatorPathVisitor.withLongCounters(new AgeFileFilter(cutoff));
//
// Walk one dir
Files.walkFileTree(dir, Collections.emptySet(), 1, visitor);
System.out.println(visitor.getPathCounters());
System.out.println(visitor.getFileList());
//
visitor.getPathCounters().reset();
//
// Walk dir tree
Files.walkFileTree(dir, visitor);
System.out.println(visitor.getPathCounters());
System.out.println(visitor.getDirList());
System.out.println(visitor.getFileList());
There are a few other goodies in that class so please have a look at the documentation in detail.
-
Interface Summary Interface Description ConditionalFileFilter Defines operations for conditional file filters.IOFileFilter An interface which brings the FileFilter, FilenameFilter, and PathFilter interfaces together. -
Class Summary Class Description AbstractFileFilter Abstracts the implementation of theFileFilter(IO),FilenameFilter(IO),PathFilter(NIO) interfaces via our ownIOFileFilterinterface.AgeFileFilter Filters files based on a cutoff time, can filter either newer files or files equal to or older.AndFileFilter AFileFilterproviding conditional AND logic across a list of file filters.CanExecuteFileFilter This filter acceptsFiles that can be executed.CanReadFileFilter This filter acceptsFiles that can be read.CanWriteFileFilter This filter acceptsFiles that can be written to.DelegateFileFilter This class turns a Java FileFilter or FilenameFilter into an IO FileFilter.DirectoryFileFilter This filter acceptsFiles that are directories.EmptyFileFilter This filter accepts files or directories that are empty.FalseFileFilter A file filter that always returns false.FileEqualsFileFilter Accepts only an exactFileobject match.FileFileFilter This filter acceptsFiles that are files (not directories).FileFilterUtils Useful utilities for working with file filters.HiddenFileFilter This filter acceptsFiles that are hidden.MagicNumberFileFilter File filter for matching files containing a "magic number".NameFileFilter Filters file names for a certain name.NotFileFilter This filter produces a logical NOT of the filters specified.OrFileFilter AFileFilterproviding conditional OR logic across a list of file filters.PathEqualsFileFilter Accepts only an exactPathobject match.PathVisitorFileFilter A file filter backed by a path visitor.PrefixFileFilter Filters file names for a certain prefix.RegexFileFilter Filters files using supplied regular expression(s).SizeFileFilter Filters files based on size, can filter either smaller files or files equal to or larger than a given threshold.SuffixFileFilter Filters files based on the suffix (what the file name ends with).SymbolicLinkFileFilter This filter acceptsFiles that are symbolic links.TrueFileFilter A file filter that always returns true.WildcardFileFilter Filters files using the supplied wildcards.WildcardFilter Deprecated. Use WildcardFileFilter.