# Java `FileFilter`示例

> 原文： [https://howtodoinjava.com/java/io/java-io-filefilter-example-tutorial/](https://howtodoinjava.com/java/io/java-io-filefilter-example-tutorial/)

有时我们会遇到这样的情况：必须在目录中处理特定类型的文件。 IO 包中提供[**`java.io.FileFilter`**](https://docs.oracle.com/javase/6/docs/api/java/io/FileFilter.html "FileFilter")类仅用于这些目的。 让我们看一个简单的例子。 没什么复杂的。

让我们看一下`FileFilter`接口的源代码。 它仅包含一个方法，该方法将`File`实例作为参数，并根据文件满足所需条件返回`true`/`false。`

```java
public interface FileFilter
{
   public abstract boolean accept(File file);
}

```

在此示例中，我正在构建`FileFilter`的实例，该实例可用于从指定目录中过滤掉`.log `文件。 让我们看一下`FileFilter`实例的实现代码。

```java
//create a FileFilter and override its accept-method
FileFilter logFilefilter 
				= new FileFilter() {
				  //Override accept method
				  public boolean accept(File file) {
					 //if the file extension is .log return true, else false
					 if (file.getName().endsWith(".log")) {
						return true;
					 }
					 return false;
				  }
			   };

```

上面的`accept`方法检查文件扩展名； 如果是`.log`，则将其视为日志文件，并且方法返回`true`；否则，方法返回`false`。

现在来看`FileFilter`的工作示例。

```java
import java.io.File;
import java.io.FileFilter;

public class IOUtils
{
   public void getFiles(String dir)
   {
      File directory = new File(dir);
      //Verify if it is a valid file name
      if (!directory.exists())
      {
         System.out.println(String.format("Directory %s does not exist", dir));
         return;
      }
      //Verify if it is a directory and not a file path
      if (!directory.isDirectory())
      {
         System.out.println(String.format("Provided value %s is not a directory", dir));
         return;
      }
      File[] files = directory.listFiles(logFilefilter);
      //Let's list out the filtered files
      for (File f : files)
      {
         System.out.println(f.getName());
      }
   }

   //create a FileFilter and override its accept-method
   FileFilter logFilefilter = new FileFilter() {
                                  //Override accept method
                                  public boolean accept(File file) {
                                     //if the file extension is .log return true, else false
                                     if (file.getName().endsWith(".log")) {
                                        return true;
                                     }
                                     return false;
                                  }
                               };

   //Test the file filtering                         
   public static void main(String[] args)
   {
      IOUtils ioUtils = new IOUtils();
      ioUtils.getFiles("C:\\temp");
   }
}

Output:

test.log
test1.log

```

上面的程序将列出“`c:/temp`”文件夹中的所有日志文件。

您可以构建自己的文件过滤器实例并实现自己的规则。 其余逻辑保持不变。

**祝您学习愉快！**