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

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

  • 【基礎】listFilesとは
  • 【基礎】listFilesの基本的な使い方
  • 【発展】listFilesの注意点
  • 【発展】指定したパスの一覧を取得する
  • 【発展】ファイルリストをフィルタリングする
  • などの応用的な使い方に関しても解説していきます。今回はそんなlistFilesメソッドについて、さまざまな方法をわかりやすく解説します!

    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クラスについては、以下の記事で詳しく解説しています!

    【Java入門】フィルタを使用してFileを一覧化する方法
    更新日 : 2019年10月16日

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

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

    JavaのFileクラスをマスター!基礎から便利な使い方まで総まとめ
    更新日 : 2019年5月10日

    まとめ

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

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

    LINEで送る
    Pocket

    SEからWebエンジニアへ転職した理由

    侍エンジニア塾卒業生の小池さんは、以前は社内SEとして約5年ほど勤務していました。しかし業務内容は社内のヘルプデスク対応など、プログラムを書く仕事は全くなかったそうです。

    SEながらプログラムを書けない現状に「将来仕事がなくなるんじゃないか」と不安を感じ、プログラミング学習を決意。

    弊社スクールで学習し、無事ベンチャー企業のプログラマーとして転職に成功しました。そんな小池さんの学習法や転職体験談を伺いましたので、是非ご覧ください。

    「プログラミングができないSEは仕事がなくなる」不安を感じたSEが未経験から転職成功するまで
    更新日 : 2019年10月7日

    書いた人

    侍テック編集部

    侍テック編集部

    おすすめコンテンツ

    あなたにぴったりなプログラミング学習プランを無料で診断!

    プログラミング学習の効率を劇的に上げる学習メソッドを解説