Windowsでは、標準でフォルダのサイズを一覧する方法がありません。私の仕事場では、いつもファイルサーバの空き容量不足に悩まされていて、どのフォルダがどのくらい容量を食ってるか調べたいのに、ひとつひとつ右クリックしてプロパティでサイズを確認するしか方法がありません。UNIXの「du -sk *」みたいな感じで、サブディレクトリのサイズをずらーっと表示してくれるコマンドとかがないか探してみましたが、標準のDOSコマンドにそういうものは無いようです。

世の中にはフォルダサイズを一覧するフリーソフトなんかもたくさんあるわけですが、仕事場のPCだと、そもそもインターネットにアクセスできなかったり、あるいは勝手にソフトをインストールすることを禁止されてたりもするので、それも使えません。うーん、なんとかならんもんか。

よく考えると、目の前のPCにはJavaの開発環境が入っていて、Javaのプログラムならいくらでも実行できるんだから、これでプログラム書いて調べればいいじゃないか、ということで、やっつけで作ったのがコレです。対象フォルダのパスをハードコーディングしちゃってたりしますが、IDEならここ書き換えてすぐ再実行できるから、まいっかと。簡単なプログラムですが、どこでも使えそうだし、あとでもう一回イチから考えるのも面倒なので、メモしておきます。

import java.io.File;

public class DiskUsage {
    public static void main(String[] args) {
        File target = new File("//FileServer/path");
        for (File member : target.listFiles()) {
            System.out.println(calc(member) + "\t" + member.getName());
        }
    }

    public static long calc(File f) {
        if (f.isDirectory()) {
            File[] children = f.listFiles();
            if (children == null) {
                System.err.println("Permission denied: " + f);
                return 0;
            }

            long sum = 0;
            for (File child : children) {
                sum += calc(child);
            }
            return sum;
        }
        return f.length();
    }
}