O'Reilly logo

Java I/O by Elliotte Rusty Harold

Stay ahead with the world's most comprehensive technology and business learning platform.

With Safari, you learn the way you learn best. Get unlimited access to videos, live online training, learning paths, books, tutorials, and more.

Start Free Trial

No credit card required

Filename Filters

You often want to look for a particular kind of file—for example, text files. To do this, you need a FilenameFilter object that specifies which files you’ll accept. FilenameFilter is an interface in the java.io package:

public interface FilenameFilter

This interface declares a single method, accept():

public abstract boolean accept(File directory, String name);

The directory argument is a File object pointing to a directory, and the name argument is the name of a file. The method should return true if a file with this name in this directory passes through the filter and false if it doesn’t. Because FilenameFilter is an interface, it must be implemented in a class. Example 12.6 is a class that filters out everything that is not an HTML file.

Example 12-6. HTMLFilter

import java.io.*;

public class HTMLFilter implements FilenameFilter {

 public boolean accept(File directory, String name) {
 
   if (name.endsWith(".html")) return true;
   if (name.endsWith(".htm")) return true;
   return false;
 }
}

Files can be filtered using any criteria you like. An accept() method may test modification date, permissions, file size, and any attribute Java supports. (You can’t filter by attributes Java does not support, like Macintosh file and creator codes, at least not without native methods or some sort of access to the native API.) This accept() method tests whether the file ends with .html and is in a directory where the program can read files:

public boolean accept(File directory, String name) ...

With Safari, you learn the way you learn best. Get unlimited access to videos, live online training, learning paths, books, interactive tutorials, and more.

Start Free Trial

No credit card required