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メソッドの使い方を忘れてしまったら、この記事を思い出してくださいね!