各ディレクトリ内のファイル数を一覧表示する
突然ですが、僕は東方Projectというゲームが好きです。
2007年頃に遊びはじめたのでまる9年になります。
このゲームではたくさんの女の子キャラが出ています。昔の僕はいろんなサイトをめぐってイラストを集めていました。
これがその画面です。キャラクター別にフォルダ名をつけていて、中に画像ファイルが収まっています。
東方画像
└⑨
└画像ファイル(複数)
└akyu
└alice
…
フォルダ自体、結構な数(50近く)あります。
ところで、各フォルダに何枚画像が入っているか調べる場合、とりあえずダブルクリックして開いてみるか、さもなくば右クリック→プロパティが一般的かと思います。
しかし、たくさんのフォルダについてざっと見たい場合は、上記のいちいち開く方法は使えません。
さすがに、ウィンドウズのエクスプローラーに標準で備わっているだろうと思ってそれっぽいのを試してみました。
でませんね……。なんでしょうねこの機能は。
しょうがないので自分で作りました。
import java.io.*; import java.nio.file.*; import java.util.*; public class TouhouPic{ static int allpic = 0; static int filecount = 0; static String nowdirname = "temp"; static boolean eachdir_kaishi_delete = false; /* 初期値falseにより上書き */ public static void main(String[] args) throws IOException { File th_dir = new File("-ここにパスを記入-"); System.out.println("ディレクトリ内全ファイル数"); count_all(th_dir.listFiles(), th_dir.getName()); System.out.println("Allfile:" + allpic); } private static void count_all(File[] list, String dirname){ for (File f : list){ if (f.isDirectory()){ try{ Writer w = new FileWriter("hoge.csv", eachdir_kaishi_delete ); w.write(nowdirname); w.write(","); w.write(String.valueOf(filecount)); w.write("\r\n"); w.flush(); w.close(); eachdir_kaishi_delete = true; } catch (IOException e){ System.out.println( "多分ファイル書き込みエラー" ); } nowdirname = f.getName(); filecount = 0; /* 入れ子にして各サブディレクトリ内のファイス数を計上 */ count_all(f.listFiles(), nowdirname); } else { filecount++; allpic++; } } } }
ソースにスクロールバーつけようとしたけどやり方分からん(すみません)。
出力したcsvが以下
ざっと見れるようにはなりました。ただcsvのせいかExcelのせいか若干見づらいですね。
ちなみに一番上の”temp”はそういうディレクトリが”東方画像”内にあるわけではなくプログラムが動くために置いています。
ついでに、allpicで画像ファイルが全部で何枚あるのかざっと分かるようにしました。
「ざっと」というのは各画像フォルダの中にあるThumbs.dbも数え上げられているため、正確ではないという意味です。
色々不完全すぎていつか直そうかなと思っていましたが、本人にモチベがないのでこれで上げる事にします。