# Package org.apache.commons.io.filefilter

package org.apache.commons.io.filefilter
Provides the 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.

There are a number of 'primitive' filters:
DirectoryFilter | Only accept directories
PrefixFileFilter | Filter based on a prefix
SuffixFileFilter | Filter based on a suffix
NameFileFilter | Filter based on a file name
WildcardFileFilter | Filter based on wildcards
AgeFileFilter | Filter based on last modified time of file
SizeFileFilter | Filter based on file size

And there are five 'boolean' filters:
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 directory
     Files.walkFileTree(dir, Collections.emptySet(), 1, visitor);
     System.out.println(visitor.getPathCounters());
     System.out.println(visitor.getFileList());
     //
     visitor.getPathCounters().reset();
     //
     // Walk directory 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.

- Related Packages
  Package
  Description
  org.apache.commons.io
  Provides classes for working with streams, readers, writers and files.
- Class
  Description
  AbstractFileFilter
  Abstracts the implementation of the `FileFilter` (IO), `FilenameFilter` (IO), `PathFilter` (NIO) interfaces via our own `IOFileFilter` interface.
  AgeFileFilter
  Filters files based on a cutoff time, can filter either newer files or files equal to or older.
  AndFileFilter
  A `FileFilter` providing conditional AND logic across a list of file filters.
  CanExecuteFileFilter
  This filter accepts `File`s that can be executed.
  CanReadFileFilter
  This filter accepts `File`s that can be read.
  CanWriteFileFilter
  This filter accepts `File`s that can be written to.
  ConditionalFileFilter
  Defines operations for conditional file filters.
  DelegateFileFilter
  This class turns a Java FileFilter or FilenameFilter into an IO FileFilter.
  DirectoryFileFilter
  This filter accepts `File`s 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 exact `File` object match.
  FileFileFilter
  This filter accepts `File`s that are files (not directories).
  FileFilterUtils
  Useful utilities for working with file filters.
  HiddenFileFilter
  This filter accepts `File`s that are hidden.
  IOFileFilter
  An interface which brings the `FileFilter`, `FilenameFilter`, `PathFilter`, and `PathMatcher` interfaces together.
  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
  A `FileFilter` providing conditional OR logic across a list of file filters.
  PathEqualsFileFilter
  Accepts only an exact `Path` object match.
  PathMatcherFileFilter
  Delegates matching to a `PathMatcher`.
  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 accepts `File`s that are symbolic links.
  TrueFileFilter
  A file filter that always returns true.
  WildcardFileFilter
  Filters files using the supplied wildcards.
  WildcardFileFilter.Builder
  Builds a new `WildcardFileFilter` instance.
  WildcardFilter
  Deprecated.
  Use WildcardFileFilter.