File.listFiles/FileFilterでファイル選別

2009/03/23 18:20Update
TAGS: File | ファイル | FileFilter | FilenameFilter | フィルタ

File.listFiles()メソッドは該当するファイル(フォルダ)のサブファイルやサブディレクトリを取得することができます。本文は、FileFilterとFilenameFilterを使ったサンプルから、File.listFiles()メソッドの戻り値を選別(フィルタ)する方法について学びます。

java.io.Fileクラスのlist()メソッド:

String[]     list()
          すべてのサブファイルおよびサブディレクトリを示す文字列の配列を返します。
String[]     list(FilenameFilter filter)
          指定されたファイル名フィルタの基準を満たすサブファイル及びサブディレクトリの文字列の配列を返します。
File[]     listFiles()
          すべてのサブファイルおよびサブディレクトリを示すFileオブジェクトの配列を返します。
File[]     listFiles(FileFilter filter)
          指定されたフィルタの基準を満たすサブファイル及びサブディレクトリのFileオブジェクトの配列を返します。
File[]     listFiles(FilenameFilter filter)
          指定されたファイル名フィルタの基準を満たすサブファイル及びサブディレクトリのFileオブジェクトの配列を返します。

サンプル


サンプルからみてみます。

例1:
以下のサンプルは、指定する拡張子(.zip)であるファイルだけを取得します。
    public static FilenameFilter getFileExtensionFilter(String extension) {
        final String _extension = extension;
        return new FilenameFilter() {
            public boolean accept(File file, String name) {
                boolean ret = name.endsWith(_extension); 
                return ret;
            }
        };
    }

    File file = new File("c:\\");
    //拡張子は.zipのファイルを取得します。
    File[] zipFiles = file.listFiles(getFileExtensionFilter(".zip"));



例2:
以下のサンプルは、ファイル名が指定する正規表現のパターンにマッチするファイルを取得します。
    public static FilenameFilter getFileRegexFilter(String regex) {
        final String regex_ = regex;
        return new FilenameFilter() {
            public boolean accept(File file, String name) {
                boolean ret = name.matches(regex_); 
                return ret;
            }
        };
    }

    File file = new File("c:\\");
    //ファイル名は8つの数字で構成され、拡張子は.htmlのファイルを取得します。
    File[] numberHtmlFiles = file.listFiles(getFileRegexFilter("[0-9]{8}\\.html"));


例3:
以下のサンプルは、フォルダではなくサブファイルを取得します。
    public static FileFilter getNotDirFileFilter() {
        return new FileFilter() {
            public boolean accept(File file) {
                return file.isFile();
            }
        };
    }

    File file = new File("c:\\");
    File[] notDirFiles = file.listFiles(getNotDirFileFilter());


参考資料


java.io.File API仕様
java.io.FileFilter API仕様
java.io.FilenameFilter API仕様

有关作者
Syboos.jp編集長AJavaやオープンソース情報の執筆、Webサイトの開発や運営全般の業務に携わる。

Sponsored Link


Comments

用户名 (required)

Email (will not be published) (required)

URL

Evaluation