You need to select all the files in a directory ending in .xml
, or you need to select only files (not
subdirectories) contained in a directory. In other words, you need to
filter a list of files.
Use one of the many implementations of IOFileFilter
in the org.apache.commons.io.filefilter
package. This
package contains various implementations of FileFilter
and FilenameFilter
, which can be used to filter
the contents of a directory. The following example uses SuffixFileFilter
to return an array of
filenames that end in .xml
:
import java.io.FilenameFilter; import org.apache.commons.io.filefilter.SuffixFileFilter; import org.apache.commons.lang.ArrayUtils; File rootDir = new File("."); FilenameFilter fileFilter = new SuffixFileFilter(".xml"); String[] xmlFiles = rootDir.list( fileFilter ); System.out.println( "*** XML Files" ); System.out.println( ArrayUtils.toString( xmlFiles ) );
This code searches for all files ending in .xml
in the current directory. Running this
in the root of the example project matches one file, project.xml
, producing the following
output:
*** XML Files {project.xml}
The org.apache.commons.io.filefilter
package contains a number of implementations of FilenameFilter
and FileFilter
. PrefixFileFilter
and SuffixFileFilter
let you match files and
directories by a prefix or suffix. NameFileFilter
matches a file or a directory
to a specific name. DirectoryFileFilter
accepts only directories.
AndFileFilter
, OrFileFilter
, and NotFileFilter
allow for the logical
combination of filters. The following example uses a combination of the
file filters in this package to list .htm
or .html
files in a directory:
import org.apache.commons.io.filefilter.AndFileFilter; import org.apache.commons.io.filefilter.DirectoryFileFilter; import org.apache.commons.io.filefilter.IOFileFilter; import org.apache.commons.io.filefilter.NotFileFilter; import org.apache.commons.io.filefilter.OrFileFilter; import org.apache.commons.io.filefilter.SuffixFileFilter; import org.apache.commons.lang.ArrayUtils; IOFileFilter htmlFilter = new OrFileFilter( new SuffixFileFilter("htm"), new SuffixFileFilter("html") ); IOFileFilter notDirectory = new NotFileFilter( DirectoryFileFilter.INSTANCE ); FilenameFilter fileFilter = new AndFileFilter( htmlFilter, notDirectory ); String[] htmlFiles = rootDir.list(fileFilter); System.out.println( "*** HTML Files" ); System.out.println( ArrayUtils.toString( htmlFiles ) );
This example combines two SuffixFileFilter
instances in an OrFileFilter
to match .htm
or .html
files. Wrapping a DirectoryFileFilter
with a NotFileFilter
creates a filter that will
accept files and reject directories. Combining these two filters in an
AndFileFilter
creates a filter to
list files with either suffix. Every filter defined in the org.apache.commons.io.filefilter
package is an
implementation of the IOFileFilter
,
which implements both the java.io.FileFilter
and java.io.FilenameFilter
interfaces.