【Java入門】FileのlistFilesでファイルを検索して一覧を取得

Javaではファイルやディレクトリの一覧を取得できるlistFilesメソッドがあります。ここでは、そんなlistFilesメソッドについて、以下の内容で解説していきます。

  • 【基礎】listFilesとは
  • 【基礎】listFilesの基本的な使い方
  • 【発展】listFilesの注意点
  • 【発展】指定したパスの一覧を取得する
  • 【発展】ファイルリストをフィルタリングする

などの応用的な使い方に関しても解説していきます。今回はそんなlistFilesメソッドについて、さまざまな方法をわかりやすく解説します!

なお、Javaの記事については、こちらにまとめています。

目次

listFilesとは

FileクラスのlistFilesメソッドは、指定したディレクトリに含まれるファイルやディレクトリを配列として返します。

public File[] listFiles()

listFilesメソッドを使用すれば、Fileクラスのオブジェクト配列に、ディレクトリやファイルを一覧として取得することができます。主に指定したパスの中身を調べたいときに使用します。

listFilesの使い方

以下にlistFilesメソッドを使用した、指定したパスに存在するファイル・ディレクトリを取得する方法を記述します。

import java.io.File;

public class ListFiles {
 
    public static void main(String[] args) {
        //Fileクラスのオブジェクトを生成する
        File dir = new File("/Users/Shared/java/");
        
        //listFilesメソッドを使用して一覧を取得する
        File[] list = dir.listFiles();
        
        System.out.println(list.length);
    }

}

サンプルではFileクラスオブジェクト生成時の引数に、取得する対象のパスを指定し、listFilesメソッドを使用して一覧を取得しています。

listFilesの注意点

listFilesメソッドは、指定したパス名がディレクトリを示さない場合や、入出力エラーが発生した場合はnullを返します。もし、nullの状態でそのままファイルオブジェクト配列を参照すると、java.lang.NullPointerExceptionの例外が発生しますので、事前にnullチェックをしておいたほうが良いでしょう。

以下にファイルのオブジェクト配列が、nullかチェックする方法を記述します。

import java.io.File;

public class ListFiles {
 
    public static void main(String[] args) {
        //Fileクラスのオブジェクトを生成する
        File dir = new File("/Users/Shared/java/");
        
        //listFilesメソッドを使用して一覧を取得する
        File[] list = dir.listFiles();
        
        if(list != null) {
            System.out.println(list.length);
        } else {
            System.out.println("null");
        }
    }

}

ディレクトリとファイルの一覧を取得する

listFilesメソッドで取得したFileクラスのオブジェクトの配列が、ディレクトリかファイルか判別するには、FileクラスのisFileメソッドと、isDirectoryメソッドを使用します。isFileメソッドとisDirectoryメソッドは、それぞれ対象がファイルかディレクトリだったらtrueを返します。

以下にlistFilesメソッドで取得したディレクトリの一覧を、ファイルとディレクトリで判別する方法を記述します。

import java.io.File;

public class ListFiles {
 
    public static void main(String[] args) {
        //Fileクラスのオブジェクトを生成する
        File dir = new File("/Users/Shared/java");
        
        //listFilesメソッドを使用して一覧を取得する
        File[] list = dir.listFiles();
        
        if(list != null) {
            
            for(int i=0; i<list.length; i++) {
                
                //ファイルの場合
                if(list[i].isFile()) {
                    System.out.println("ファイルです : " + list[i].toString());
                }
                //ディレクトリの場合
                else if(list[i].isDirectory()) {
                    System.out.println("ディレクトリです : " + list[i].toString());
                }
            }
        } else {
            System.out.println("null");
        }
    }

}

サンプルではlistFilesメソッドで取得した一覧を、ループで回してisFileメソッドとisDirectoryメソッドを使用して、ファイルまたはディレクトリか判別しています。

ファイルリストをフィルタリングする

listFilesメソッドを使用してファイルの一覧を取得するとき、特定の条件のファイルのみフィルタリングして取得したい場合があります。ファイルをフィルタリングする場合には、FilenameFilterクラスを使用すると、指定した条件のファイルを取得することができます。

FilenameFilterクラスは、以下のパッケージをインポートします。

import java.io.FilenameFilter;

以下にlistFilesメソッドを使用して、取得した一覧をFilenameFilterクラスを使用してフィルタリングする方法を記述します。

import java.io.File;
import java.io.FilenameFilter;

public class ListFiles {
 
    public static void main(String[] args) {
        //フィルタを作成する
        FilenameFilter filter = new FilenameFilter(){
            public boolean accept(File file, String str){
                
                //指定文字列でフィルタする
                if(str.indexOf("java") != -1) {
                    return true;
                } else {
                    return false;
                }
            }
        };
        
        //listFilesメソッドを使用して一覧を取得する
        File[] list = new File("/Users/Shared/java").listFiles(filter);
        
        if(list != null) {
            
            for(int i=0; i<list.length; i++) {
                
                //ファイルの場合
                if(list[i].isFile()) {
                    System.out.println("ファイルです : " + list[i].toString());
                }
                //ディレクトリの場合
                else if(list[i].isDirectory()) {
                    System.out.println("ディレクトリです : " + list[i].toString());
                }
            }
        } else {
            System.out.println("null");
        }
    }

}

サンプルで使用したファイルをフィルタリングするFilenameFilterクラスについては、以下の記事で詳しく解説しています!

Fileでの読み書き、コピー、deleteなどを紹介

Fileクラスを使ったファイルの読み込み、書き込み、コピー、deleteやexistsメソッドの使い方などについては、こちらで詳しく解説しています。ぜひ参考にしてくださいね。

まとめ

ここではFileクラスのlistFilesメソッドについて、意味や基本的な使い方の説明、注意点や応用的な使い方について説明しました。listFilesメソッドは、取得したファイルやディレクトリを一覧化して、特定のファイルが存在するか調べるときによく使われます。

もし、listFilesメソッドの使い方を忘れてしまったら、この記事を思い出してくださいね!

この記事を書いた人

侍エンジニア塾は「人生を変えるプログラミング学習」をコンセンプトに、過去多くのフリーランスエンジニアを輩出したプログラミングスクールです。侍テック編集部では技術系コンテンツを中心に有用な情報を発信していきます。

目次