Java
 Computer >> コンピューター >  >> プログラミング >> Java

Javaでディレクトリからファイルのみを一覧表示する方法を解説

Javaで特定のディレクトリに含まれる「ファイルのみ」を一覧表示する方法は複数あります。本記事では、代表的な2つの手法――FileFilterインターフェースとlistFiles()メソッドを組み合わせる方法、そしてFiles.walk()とStream APIを使う方法――を、実際のコード例と実行結果とともに解説します。

listFiles()メソッドとFileFilterインターフェースとは

java.io.FileクラスのlistFiles()メソッドは、現在のFileオブジェクトが表すパスに存在するすべてのファイルおよびディレクトリのオブジェクト(抽象パス名)を配列として返します。

FileFilterインターフェースは、パス名をフィルタリングするためのインターフェースです。その実装をlistFiles()メソッドの引数として渡すことで、条件に一致する要素だけを取得できます。

フォルダ内のファイルのみを取得したい場合は、「ファイルだけを受け入れる」FileFilterを実装し、それをlistFiles()メソッドに渡します。

以下は、サンプルディレクトリ「ExampleDirectory」の内容を示すスクリーンショットです。

Javaでディレクトリからファイルのみを一覧表示する方法を解説

例1:FileFilterを使ってファイルのみを取得する

import java.io.File;
import java.io.FileFilter;
import java.io.IOException;

public class Demo {
    public static void main(String args[]) throws IOException {
        // ディレクトリを表すFileオブジェクトを作成
        File directoryPath = new File("D:\\ExampleDirectory");

        // ファイルのみを受け入れるフィルタを作成
        FileFilter fileFilter = new FileFilter() {
            public boolean accept(File dir) {
                if (dir.isFile()) {
                    return true;
                } else {
                    return false;
                }
            }
        };

        File[] list = directoryPath.listFiles(fileFilter);
        System.out.println("指定されたディレクトリ内のファイル一覧:");
        for (File fileName : list) {
            System.out.println(fileName);
        }
    }
}

実行結果

指定されたディレクトリ内のファイル一覧:
D:\ExampleDirectory\demo1.pdf
D:\ExampleDirectory\demo2.pdf
D:\ExampleDirectory\sample1.txt
D:\ExampleDirectory\sample2.txt
D:\ExampleDirectory\sample3.txt
D:\ExampleDirectory\sample_jpeg1.jpg
D:\ExampleDirectory\sample_jpeg2.jpg
D:\ExampleDirectory\test1.docx
D:\ExampleDirectory\test2.docx

例2:Files.walk()とStream APIを使う方法

Java 8以降では、NIO.2のFiles.walk()メソッドとStream APIを組み合わせると、より簡潔に記述できます。Files.walk()はディレクトリツリーを再帰的に走査してPathのストリームを返すため、Files::isRegularFileでフィルタリングすることで、サブディレクトリ内も含めたすべての「通常ファイル」のみを抽出できます。

import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.stream.Stream;

public class ListOfFiles {
    public static void main(String[] args) throws IOException {
        Stream<Path> path = Files.walk(Paths.get("D:\\ExampleDirectory"));
        path = path.filter(Files::isRegularFile);
        path.forEach(System.out::println);
    }
}

実行結果

D:\ExampleDirectory\demo1.pdf
D:\ExampleDirectory\demo2.pdf
D:\ExampleDirectory\sample1.txt
D:\ExampleDirectory\sample2.txt
D:\ExampleDirectory\sample3.txt
D:\ExampleDirectory\sample_jpeg1.jpg
D:\ExampleDirectory\sample_jpeg2.jpg
D:\ExampleDirectory\test1.docx
D:\ExampleDirectory\test2.docx

まとめ

ディレクトリ直下のファイルだけを取得したい場合はFileFilter+listFiles()、サブディレクトリまで再帰的にファイルを収集したい場合はFiles.walk()が便利です。目的に応じて使い分けるとよいでしょう。

  1. 【Java入門】ディレクトリ内のすべてのファイルを再帰的に削除するプログラムの書き方

    この記事では、Javaを使って指定したディレクトリ内のすべてのファイルを再帰的に削除する方法を解説します。サブディレクトリの中にあるファイルも含めて、ファイルだけを削除し、ディレクトリ構造自体は残すプログラムです。前提となるディレクトリ構成まず、Dドライブ直下に ExampleDirectory というフォルダがあり、その中に7つのファイルと2つのディレクトリが含まれているものと仮定します。SampleDirectory1:SampleFile1.txt と SampleFile2.txt の2つのファイルを含むSampleDirectory2:SampleFile2.txt と Sample

  2. Javaでディレクトリ内のすべてのファイルを再帰的に一覧表示する方法

    この記事では、Javaを使って指定したディレクトリ内のすべてのファイルを再帰的に一覧表示するプログラムを解説します。サブディレクトリの中にあるファイルまで含めて取得できるため、フォルダ全体の内容を把握したい場合に便利なテクニックです。 前提となるディレクトリ構成 Dドライブ直下に「ExampleDirectory」というフォルダがあり、その中に7つのファイルと2つのサブディレクトリが格納されていると仮定します。 各サブディレクトリの内容は以下の通りです。 SampleDirectory1:SampleFile1.txt と SampleFile2.txt の2つのファイルを含みます。 Sa