Java | 「フォルダ優先 → ファイル」の Windows Explorer 風ソート

Java Java
スポンサーリンク

Windows Explorer 風の「フォルダを先に → ファイルを後に」並べるソートを Java で実現する方法を紹介します。


実務的なシナリオ

  • ディレクトリを一覧表示するとき、フォルダが先に並び、その後にファイルが並ぶようにしたい。
  • さらに、フォルダ内では名前順、ファイル内でも名前順に並べる。

完全なコード例

import java.io.File;
import java.util.*;

public class ExplorerLikeSort {
    public static void main(String[] args) {
        // 対象ディレクトリを指定(例: C:/example)
        File dir = new File("C:/example");

        File[] files = dir.listFiles();
        if (files == null) {
            System.out.println("ディレクトリが存在しないか、アクセスできません。");
            return;
        }

        // フォルダ優先 → ファイル のソート
        Arrays.sort(files, new Comparator<File>() {
            @Override
            public int compare(File f1, File f2) {
                // 1. フォルダ優先
                if (f1.isDirectory() && !f2.isDirectory()) {
                    return -1; // f1がフォルダなら先
                } else if (!f1.isDirectory() && f2.isDirectory()) {
                    return 1;  // f2がフォルダなら先
                }
                // 2. 同じ種類なら名前順
                return f1.getName().compareToIgnoreCase(f2.getName());
            }
        });

        // 結果を表示
        System.out.println("=== Windows Explorer風ソート結果 ===");
        for (File f : files) {
            String type = f.isDirectory() ? "[DIR]" : "[FILE]";
            System.out.println(type + " " + f.getName());
        }
    }
}
Java

実行例(仮想出力)

=== Windows Explorer風ソート結果 ===
[DIR] Documents
[DIR] Pictures
[DIR] Videos
[FILE] notes.txt
[FILE] report.pdf
[FILE] todo.docx

応用ポイント

  • サイズ順にしたい場合: thenComparingLong(File::length) を追加。
  • 更新日順にしたい場合: thenComparingLong(File::lastModified).reversed() を追加。
  • 複合条件: 「フォルダ優先 → 名前順 → 更新日順」など自由に組み合わせ可能。

これで「フォルダ優先 → ファイル」の Windows Explorer 風ソートが実現できます。

Java
スポンサーリンク
シェアする
@lifehackerをフォローする
スポンサーリンク
タイトルとURLをコピーしました