前回ファイルの一覧を表示させるプログラムを書きました。しかしこのときは実際のファイルだけでディレクトリは含んでいませんでした。今回はディレクトリもそれとわかるように表示させたいと思います。
ファイルの詳しい情報を取得する
前回のコードをみると取得しているのはファイル名の配列だけでした。今回はFileクラスのインスタンスの配列を取得するためにlistメソッドではなくlistFilesメソッドを使います。Fileクラスには名前以外にも様々な情報があるためより細かい操作をしたい場合にはこちらの方が便利です。
File mywork = new File("/Users/myaccount/mywork"); File[] files = mywork.listFiles(); for (File file : files) { System.out.println(file.getName()); }
ここで指定された/Users/myaccount/myworkにはディレクトリも含む以下のようなファイル構成になっているものをします。dir_1はディレクトリになっていて二つのファイルがあるものとします。
. ├── dir_1 │ ├── file_d.txt │ └── file_e.txt ├── file_a.txt ├── file_b.txt └── file_c.txt
さて上記のコードを実行すると以下のようになります。
.DS_Store dir_d file_a.txt file_b.txt file_c.txt
Macの環境のため.DS_Storeという隠しファイルも一覧表示されているのは前回と同じです。Windowsでは出てこないでしょう。
それ以外の4つのリストについてはファイルなのかディレクトリなのか名前からだと判別できないのでわかるような情報を出すようにします。
頭に以下のような記号をつけるようにします。
ファイルの場合 | [f] |
ディレクトリの場合 | [d] |
それ以外 | [?] |
また隠しファイルも表示しないよう前回を同じ対応をします。listFilesメソッドもlistメソッドと同様に引数にフィルターをとることができます。
File mywork = new File("/Users/myaccount/mywork"); FilenameFilter filter = new FilenameFilter() { @Override public boolean accept(File dir, String name) { if (name.toLowerCase().equals(".ds_store")) { return false; } return true; } }; File[] files = mywork.listFiles(filter); for (File file : files) { String sign; if(file.isFile()){ sign = "[f]"; }else if(file.isDirectory()){ sign = "[d]"; }else{ sign = "[?]"; } System.out.println(sign + " " + file.getName()); }
実行結果は以下の通りです。
[d] dir_1 [f] file_a.txt [f] file_b.txt [f] file_c.txt