サブディレクトリも含めてファイル一覧を表示する

スポンサーリンク

前回ファイルの一覧を表示させるプログラムを書きました。しかしこのときは実際のファイルだけでディレクトリは含んでいませんでした。今回はディレクトリもそれとわかるように表示させたいと思います。

ディレクトリ上のファイルを表示させる

ファイルの詳しい情報を取得する

前回のコードをみると取得しているのはファイル名の配列だけでした。今回は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
スポンサーリンク

シェアする

  • このエントリーをはてなブックマークに追加

フォローする

%d人のブロガーが「いいね」をつけました。