【Java】listやlistFilesを使ってディレクトリ内のファイル一覧を取得する!
ディレクトリを作成するにはFileクラスのlistメソッドとFileクラスのlistFilesメソッドを使用します。
Fileクラスのlistメソッドは、指定したフォルダの中に存在しているフォルダを一覧として取得するメソッドであり、FileクラスのlistFilesメソッドは、指定したフォルダの中に存在しているファイルやフォルダを一覧として取得できるメソッドです。
そのため、指定したパスの中身を調べたい時などにlistメソッドやlistFilesメソッドを使用します。
今回はFileクラスのlistメソッドとlistFilesメソッドを使って以下の場合でディレクトリ内のファイル一覧を取得します。
⚫︎ listでディレクトリ内のファイル一覧を取得する場合
⚫︎ listFilesでディレクトリ内のファイル一覧を取得する場合
⚫︎ 指定したディレクトリ内にファイルがない場合
また、Java7から使用できるようになったFilesクラスのnewDirectoryStreamメソッドを使って、ディレクトリ内のファイル一覧を取得する方法についても紹介していきます。
目次
listメソッドとは
Fileクラスのlistメソッドとは、ディレクトリを作成するメソッドになります。
listメソッドの書き方
Fileクラスのlistメソッドの構文は下記となります。
1 2 3 |
import java.io.File; File.list(); |
まず、listメソッドが使用できるようにFileクラスをインポートします。
そして、Fileの後にlistを呼び出すことでlistの前に指定したFileのファイル名を取得します。
また、返り値はString配列となります。
listFilesメソッドとは
FileクラスのlistFilesメソッドとは、Fileオブジェクトに指定したフォルダの中に存在しているファイルやフォルダの一覧を取得するメソッドになります。
listFilesメソッドの書き方
FileクラスのlistFilesメソッドの構文は下記となります。
1 2 3 |
import java.io.File; File.listFiles(); |
まず、listFilesメソッドが使用できるようにFileクラスをインポートします。
そして、Fileの後にlistFilesを呼び出すことで指定したFileのフォルダの中に存在しているファイルやフォルダの一覧を取得できます。
また、返り値はFileクラスの配列となります。
ディレクトリ内のファイル一覧を取得するサンプルコード
ディレクトリ内のファイル一覧を取得するサンプルコードを紹介します。
また、サンプルコードを実行するディレクトリ構成は下記のようになります。
C:¥work
|ーーfileA.txt
|ーーfileB.txt
|ーーfileC.txt
|ーーfileD.txt
|ーーfileE
|ーーfileE1.txt
|ーーfileE2.txt
listでディレクトリ内のファイル一覧を取得する場合
Main.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
// ディレクトリ内のファイル一覧を取得する import java.io.File; public class Main { public static void main(String[] args) throws Exception { // ファイル一覧を取得するディレクトリ File file1 = new File("C:/work"); //Fileクラスのlistメソッドを使用してファイル一覧を取得する String[] fileList1 = file1.list(); // 取得したファイル一覧を表示する System.out.println("File.listメソッドにてファイル一覧を取得"); for (String fileName: fileList1) { System.out.println(fileName); } } } |
出力結果
File.listメソッドにてファイル一覧を取得
fileA.txt
fileB.txt
fileC.txt
fileD.txt
fileE
listメソッドによってディレクトリ内のファイルの一覧を取得しています。
listFilesでディレクトリ内のファイル一覧を取得する場合
Main.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
// ディレクトリ内のファイル一覧を取得する import java.io.File; public class Main { public static void main(String[] args) throws Exception { // ファイル一覧を取得するディレクトリ File file2 = new File("C:/work"); // FileクラスのlistFilesメソッドを使用してファイル一覧を取得する File[] fileList2 = file2.listFiles(); // 取得したファイル一覧を表示する System.out.println("File.listFilesメソッドにてファイル一覧を取得"); for (File fileList: fileList2) { System.out.println(fileList); } } } |
出力結果
File.listFilesメソッドにてファイル一覧を取得
c:\work\fileA.txt
c:\work\fileB.txt
c:\work\fileC.txt
c:\work\fileD.txt
c:\work\fileE
listFilesメソッドによって、ディレクトリ内のフォルダやファイル一の覧を取得しています。
指定したディレクトリ内にファイルがない場合
Main.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
// ディレクトリ内のファイル一覧を取得する import java.io.File; public class Main { public static void main(String[] args) throws Exception { // ファイル一覧を取得するディレクトリ File file3 = new File("C:/work"); //Fileクラスのlistメソッドを使用してファイル一覧を取得する String[] fileList3A = file3.list(); // 取得したファイル一覧を表示する System.out.println("File.listにてファイル一覧を取得"); for (String fileName: fileList3A) { System.out.println(fileName); } // FileクラスのlistFilesメソッドを使用してファイル一覧を取得する File[] fileList3B = file3.listFiles(); // 取得したファイル一覧を表示する System.out.println("File.listFilesにてファイル一覧を取得"); for (File fileList: fileList3B) { System.out.println(fileList); } } } |
出力結果
Exception in thread “main” java.lang.NullPointerException
listFilesメソッドの注意点としては指定したディレクトリが存在しない場合、戻り値としてnullが返ってきます。
今回は、戻り値であるファイルクラスの配列を参照している為、NullPointerExceptionの例外が発生しています。
NIO.2(Filesクラス)でディレクトリ内のファイル一覧を取得する場合
NIO.2とはJava7で導入された「java.nio.file」パッケージとそのサブパッケージとを合わせたものであり、NIO.2のFilesクラスを使用することでとても簡単にファイル処理を行うことができます。
FilesクラスのnewDirectoryStreamメソッドを呼び出すと、「DirectoryStream」インスタンスを戻します。
「DirectoryStream」インタフェースは「Iterable」インタフェースを継承しているため、「拡張for」文を使ってそこに含まれるすべての「Path」インスタンスを走査することができます。
それによって、ディレクトリ内のファイル一覧を取得することができます。
また、対象のディレクトリ内にファイルまたは、ディレクトリが存在しない場合は、例外が発生します。
Main2.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
// Java7でディレクトリ内のファイル一覧を取得する import java.nio.file.DirectoryStream; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; public class Sub { public static void main(String[] args) throws Exception { // ファイル一覧を取得するディレクトリ Path pathA = Paths.get("c:/work"); // ファイル一覧を取得する try (DirectoryStream<Path> stream = Files.newDirectoryStream(pathA)) { // 取得したファイル一覧を表示する for (Path file: stream) { System.out.println(file.getFileName()); } } } } |
出力結果
fileA.txt
fileB.txt
fileC.txt
fileD.txt
fileE
Main.javaで同じディレクトリ構成でMain2.javaを実行すると出力結果の内容が表示されます。
今回のポイント
listやlistFilesでディレクトリ内のファイル一覧を取得
ディレクトリを作成するにはFileクラスのlistとメソッドをFileクラスのlistFilesとメソッド使用する。
⚫︎ FileクラスのlistメソッドやFileクラスのlistFilesメソッドでディレクトリ内のファイル一覧を取得することができる
⚫︎ listメソッドはString配列、listFilesメソッドはFile配列を返す
⚫︎ ファイル一覧を取得するディレクトリ内にファイル、または、ディレクトリが存在しない場合は、「null」を戻します。
newDirectoryStreamメソッドでディレクトリ内のファイル一覧を取得
Filesクラスでディレクトリを作成するにはnewDirectoryStreamメソッド使用する。
⚫︎ FilesクラスのnewDirectoryStreamメソッドでディレクトリ内のファイル一覧を取得する、
⚫︎ 対象のディレクトリ内にファイルまたは、ディレクトリが存在しない場合は、例外が発生する
関連記事
for文についてはこちらをご参考ください。
ST
株式会社flyhawkのSTです。フライテックメディア事業部でのメディア運営・ライター業務なども担当。愛機はMac Book AirとThinkPad。好きな言語:swift、JS系(Node.js等)。好きなサーバー:AWS。受託開発やプログラミングスクールの運営をしております。ご気軽にお問い合わせください。