Java FileFilter FAQ: How do I implement a file filter in Java so I can limit the possible files that are shown to a user in a "select file" dialog, or limit the list of files that I see when listing the files in a directory?
At the moment I don't have an example of how to use a Java FileFilter with a JDialog based FileChooser, but I hope the following Java FileFilter example will help (a) demonstrate how to limit the list of files that is created when you look at a directory in Java, and (b) demonstrate the hard part of creating a Java FileFilter for use with a Java FileChooser.
A Java FileFilter implementation
First, here's a Java class named
ImageFileFilter
that implements the Java FileFilter interface. I've written this class so it will match filenames that end with image file extensions, i.e., extensions like
jpg
,
png
, and
gif
. The key thing about implementing a
FileFilter
is that you need to implement a method named
accept
, as shown below:
import java.io.*; /** * A class that implements the Java FileFilter interface. */ public class ImageFileFilter implements FileFilter { private final String[] okFileExtensions = new String[] {"jpg", "png", "gif"}; public boolean accept(File file) { for (String extension : okFileExtensions) { if (file.getName().toLowerCase().endsWith(extension)) { return true; } } return false; } }
Using my Java FileFilter class
Now that my
ImageFileFilter
implements the Java FileFilter interface, lets look at how use it in a simple test class.
As you can see in the source code below, I get a list of image files from a directory by passing a reference to my
ImageFileFilter
class into the
listFiles
method of the
java.io.File
class:
import java.io.*; import java.util.*; public class FileFilterTest { public static void main(String[] args) { new FileFilterTest(); } public FileFilterTest() { File dir = new File("/Users/al"); // list the files using our FileFilter File[] files = dir.listFiles(new ImageFileFilter()); for (File f : files) { System.out.println("file: " + f.getName()); } } }
Hopefully the rest of this source code example is easy to follow. Just change the directory to whatever directory you want to get a listing of.