HOWTO · Java

Java の FileFilter

このチュートリアルでは、Java で FileFilter を使用する方法を示します。

このページの内容

このチュートリアルでは、Java で FileFilter を使用する方法を示します。

FileFilter は、特定の拡張子を持つファイルをフィルタリングするために使用されます。 Java 組み込みパッケージ IO と Apache Commons IO は、ファイル フィルター操作を実行するためのFileFilterのクラスとインターフェイスを提供します。

Java の IO パッケージのFileFilter

FileFilter は、指定されたパスのファイルとサブディレクトリのフィルターとして使用される Java IO パッケージのクラスです。 FileFilter クラスは File オブジェクトを受け取り、読み取り専用などの属性に基づいてそれらをフィルタリングします。

FileFilter には accept() という 1つのメソッドしかありません。このメソッドは、指定された要約をリストに含めるかどうかを確認するために使用されます。 accept() メソッドの使用例を次に示します。

FileFilter Demo_Filefilter = new FileFilter() {
  public boolean accept(File Demo_File) {
    if (Demo_File.getName().endsWith(".txt")) {
      return true;
    }
    return false;
  }
};

FileFilter を使用する最良の方法は、ディレクトリの場所を表す listfiles() メソッドに FileFilter を渡すことです。

実行例を試してみましょう:

package delftstack;

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

public class Example {
  public static void main(String[] args) {
    File File_Directory = new File("C:\\Users\\Sheeraz\\eclipse-workspace\\Demos");

    // check if the directory is valid directory
    if (!(File_Directory.exists() && File_Directory.isDirectory())) {
      System.out.println(String.format("This Directory does not exist", File_Directory));
      return;
    }

    FileFilter Demo_Filefilter = new FileFilter() {
      public boolean accept(File Demo_File) {
        if (Demo_File.getName().endsWith(".txt")) {
          return true;
        }
        return false;
      }
    };

    File[] Text_Files = File_Directory.listFiles(Demo_Filefilter);

    for (File Demo_File : Text_Files) {
      System.out.println(Demo_File.getName());
    }
  }
}

上記のコードは、.txt 拡張子を持つファイルをフィルタリングします。

出力を参照してください:

delftstack.txt

FileFilter はラムダ式を使用して実装することもできますが、構文はそれほど簡単ではありません。

例を参照してください:

package delftstack;

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

public class Example {
  public static void main(String[] args) {
    File File_Directory = new File("C:\\Users\\Sheeraz\\eclipse-workspace\\Demos");

    // check if the directory is valid directory
    if (!(File_Directory.exists() && File_Directory.isDirectory())) {
      System.out.println(String.format("This Directory does not exist", File_Directory));
      return;
    }

    FileFilter Demo_FileFilter = (Demo_File) -> {
      return Demo_File.getName().endsWith(".txt");
    };

    File[] Text_Files = File_Directory.listFiles(Demo_FileFilter);

    for (File Demo_File : Text_Files) {
      System.out.println(Demo_File.getName());
    }
  }
}

上記のコードは同様に機能し、.txt 拡張子を持つファイルを返します。

出力を参照してください:

delftstack.txt

Java の Apache Commons IO パッケージのFileFilter

Apache Commons-IO の FileFilter パッケージは、特定の拡張子を持つファイルの選択、特定の文字で開始または終了するファイルの選択など、さまざまなファイル フィルター操作を実行するために使用されます。Apache Commons の FileFilter パッケージ は、プリミティブ フィルタとブール値フィルタを提供します。これは、フィルタの一部がプリミティブ値を返し、一部がブール値を返すことを意味します。

以下の表を参照してください。

プリミティブ フィルター:

方法 説明
DirectoryFilter ディレクトリのみを受け入れます。
PrefixFileFilter プレフィックスに基づいてフィルタリングします。
SuffixFileFilter サフィックスに基づいてフィルタリングします。
NameFileFilter ファイル名に基づいてフィルタリングするために使用されます。
WildcardFileFilter ワイルドカードに基づいてフィルタリングするために使用されます。
AgeFileFilter ファイルの最終変更時刻に基づいてフィルタリングします。
SizeFileFilter ファイルサイズに基づいてフィルタリングします。

ブール値フィルター:

方法 説明
TrueFileFilter すべてのファイルを受け入れます。
FalseFileFilter ファイルは受け付けません。
NotFileFilter 論理 NOT を既存のフィルターに適用します。
AndFileFilter 論理 AND を使用して 2つのフィルターを結合します。
OrFileFilter 論理 OR を使用して 2つのフィルターを結合します。

例で上記のメソッドからフィルターを使用してみましょう。

package delftstack;

import java.io.File;
import java.io.IOException;
import org.apache.commons.io.filefilter.SuffixFileFilter;

public class Example {
  public static void main(String[] args) {
    try {
      Suffix_FileFilter();
    } catch (IOException iox) {
      System.out.println(iox.getMessage());
    }
  }
  public static void Suffix_FileFilter() throws IOException {
    // current directory
    File Current_Directory = new File(".");
    // all files and directories in the current directory
    String[] All_Files = Current_Directory.list();
    System.out.println("All files and directories :\n");
    for (int i = 0; i < All_Files.length; i++) {
      System.out.println(All_Files[i]);
    }
    System.out.println("\nThe Text Files: \n");
    String[] Text_Files = Current_Directory.list(new SuffixFileFilter("txt"));
    for (int i = 0; i < Text_Files.length; i++) {
      System.out.println(Text_Files[i]);
    }
  }
}

上記のコードは、SuffixFileFilter を使用して、指定されたディレクトリからテキスト ファイルをフィルタリングします。 また、指定されたフォルダーのすべてのファイルとサブディレクトリも一覧表示されます。

出力を参照してください。

All files and directories :

.classpath
.gitignore
.project
bin
delftstack.fxml
delftstack.fxml.bak
delftstack.pdf
Delftstack.png
delftstack.txt
delftstack.xml
delftstack.zip
DemoClassBytes.ser
employee.json
ExampleClassBytes.ser
Makefile
pom.xml
PythonFromJava.py
readme.md
src
student.json

The Text Files:

delftstack.txt