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

【Java】ディレクトリ内の隠しファイル・隠しフォルダを一覧表示する方法

listFiles()メソッドとは

JavaのFileクラスが提供するlistFiles()メソッドは、そのFileオブジェクトが表すパスに含まれるすべてのファイルおよびディレクトリ(抽象パス名)を、File型の配列として返します。

FileFilterインターフェースで隠しディレクトリだけを抽出する

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

ディレクトリ内の隠しディレクトリ(隠しフォルダ)のみを取得したい場合は、「ディレクトリであり、かつ隠し属性を持つ」場合にtrueを返すFileFilterを実装し、それをlistFiles()に渡します。

コード例:FileFilterを使う方法

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

public class Test {
    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.isDirectory() && dir.isHidden()) {
                    return true;
                } else {
                    return false;
                }
            }
        };

        File[] list = directoryPath.listFiles(fileFilter);
        System.out.println("指定されたディレクトリ内の隠しディレクトリ一覧:");

        for (File fileName : list) {
            System.out.println(fileName.getName());
            System.out.println(fileName);
        }
    }
}

実行結果

指定されたディレクトリ内の隠しディレクトリ一覧:
hidden directory1
D:\ExampleDirectory\hidden directory1
hidden directory2
D:\ExampleDirectory\hidden directory2

isHidden()メソッド参照を使った簡潔な書き方

File::isHiddenというメソッド参照をlistFiles()に渡せば、匿名クラスを実装することなく、同じ処理をより簡潔に記述できます。さらにStream APIと組み合わせれば、結果の出力処理もすっきりまとめられます。

コード例:メソッド参照+Stream API

import java.io.File;
import java.io.IOException;
import java.util.Arrays;
import java.util.stream.Stream;

public class Demo {
    public static void main(String[] args) throws IOException {
        File dir = new File("D:\\ExampleDirectory");
        File[] files = dir.listFiles(File::isHidden);
        Stream<File> fileStream = Arrays.stream(files);
        fileStream.forEach(file -> System.out.println(file.getName()));
    }
}

実行結果

D:\ExampleDirectory\hidden directory1
D:\ExampleDirectory\hidden directory2

注意点:隠しファイルの判定はOSによって異なる

isHidden()による隠しファイルの判定は、実行環境のOSに依存します。Windowsではファイルの「隠しファイル」属性の有無で判定される一方、LinuxやmacOSなどのUnix系OSでは、名前がドット(.)で始まるファイルが隠しファイルとみなされます。異なる環境で同じ動作を期待する場合は、この仕様の違いに留意してください。

  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