Java file and directory FAQ: How do I get a list of all files in a directory that match a certain filename pattern?
For a recent Java project I needed to be able to get a list of files within a directory that matched a specific filename pattern. In this case, I needed a list of all files in a directory that began with the underscore character (_). This is relatively easy in Java; as usual it's just hard to find a good example.
Here's the sample code taken directly from my application. Only the relevant methods are shown:
public void printUIComponents() { String[] listOfFilesToParse = getListOfJSPTemplatesToParse(_jspTemplateDir); for ( int i=0; i<listOfFilesToParse.length; i++ ) { String templateName = listOfFilesToParse[i]; String outputFileSuffix = removeLeadingUnderscore(templateName); parseJspTemplate( templateName, outputFileSuffix ); } } // returns a string array that is a list of all // filenames that match the desired filename pattern String[] getListOfJSPTemplatesToParse(String aDirectory) { // our filename filter (filename pattern matcher) class OnlyUnderscoreFilter implements FilenameFilter { public boolean accept(File dir, String s) { if ( s.startsWith("_") ) return true; return false; } } return new java.io.File(aDirectory).list( new OnlyUnderscoreFilter() ); }
The action starts in the printUIComponents
method, which quickly calls the getListOfJSPTemplatesToParse
method, passing in a directory name. This method uses an inner class named OnlyUnderscoreFilter
that implements the FilenameFilter
interface. At that point all I had to do was implement the accept
method of that interface, and I was ready to go.
Everything else besides that is pretty standard stuff; the really important part was knowing that I needed to use File
and then implement the FilenameFilter
interface.