プログラム学習室 http://studyhallweb.com/

Java学習記: FilenameFilter

ファイルリスト(拡張子でフィルター)

Javaでファイルリストにフィルターをかけるのは容易ではないらしい。
ファイルリスト自体はFileクラスのlistFiles()メソッドで取得できる。このときフィルターをかけるためにはFilenameFilterというものが使用できるらしいが、このFilenameFileterはインタフェースで、そのままでは使用できない。
FilenameFilterを継承したクラスをわざわざ作成し、そのクラスの中でフィルタリングの条件を作らなければならない。

import java.io.*;

// ファイル名比較のためのクラス
class FileCheck implements FilenameFilter {
  public boolean accept(File dir, String strfilename) {
    if (strfilename.endsWith(".xml"))
      return true;
    else
      return false;
  }
}

// main()を含む本体
public class S031filelist {
  private static int filelist(String sDir) {

    int iFiles = 0;   // ファイル数

    try {
      File dir = new File(sDir);
      if (!dir.exists()) {
        throw new Exception();
      }

      // FileCheckクラスの条件に合うファイルリストを取得する
      File[] files = dir.listFiles(new FileCheck());

      int i;
      for( i=0; i < files.length; i++ ) {
        if (files[i].isFile())
          // ファイルのとき
          System.out.println(sDir + "\\" + files[i].getName());
      }
      iFiles += i;
      return iFiles;
    }
    catch(Exception e) {
      return 0;
    }
  }

  public static void main(String[] args) {
    int i = filelist(args[0]);
    System.out.println("ファイル数 = " + i );
  }
}