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

スポンサーリンク

ファイルの読み込み時に間違ったパスを指定すると存在しないファイルを開こうとしてエラーとなります。もし元々存在するファイルを選択できるようになっていればこのような問題は起こりません。ファイルのオプションを表示させてユーザがそれを選ぶことによって読み込みファイルを指定するようにしたいのですが一覧を表示させるところから始めます。

ファイル一覧を表示する

まずサンプルのディレクトリをファイルを用意します。

/Users/myaccount/mywork

このパスはユーザやOSによって適宜読み替えてください。次に3つほどファイルを作ります。

file_a.txt

これはfile_a.txtの内容です。

file_b.txt

これはfile_b.txtの内容です。

file_c.txt

これはfile_c.txtの内容です。

コードを以下のように書きます。

File mywork = new File("/Users/myaccount/mywork");
String[] filenames = mywork.list();
for(String filename:filenames){
  System.out.println(filename);
}

ディレクトリのパスでFileクラスのインスタンスを作成しそれに対しlistメソッドを呼び出すと文字列の配列が渡されます。これを実行すると以下のような結果になります。

.DS_Store
file_a.txt
file_b.txt
file_c.txt

おやと思ったのが最初の行に.DS_Storeという見覚えのないファイルが出力されています。調べてみるとこれはMac用のディレクトリ情報を保持しておく隠しファイルだそうです。ファインダーからは見えないのですがJavaでみると隠されずにリストに上がってしまったということでしょう。やはり選んで欲しくないファイルは一覧に出したくないので工夫してみましょう。Windowsのユーザーには関係ない対応ですが似たようなケースがある場合には参考にしてください。

listメソッドで一覧を出す時にかけるフィルター用インタフェースがあります。インタフェースはメソッドの定義はされていますが実装はないのでクラスとして扱えません。このため以下のように実装も記述してインスタンスを作成します。

FilenameFilter filter = new FilenameFilter() {
  @Override
  public boolean accept(File dir, String name) {
    if(name.toLowerCase().equals(".ds_store")){
      return false;
    }
    return true;
  }
};

インタフェースや抽象クラスからインスタンスを作成する時には実装されていないメソッドが実装されている必要があります。上記のFilenameFilterインタフェースはacceptメソッドを実装する必要がありました。何度も利用するのであれば.javaファイルを作って名前をつけて継承・実装クラスを作れば良いのですが一回限りの場合はこのように処理の中で実装を書き込むことによってインスタンスをその場で作ることができます。これを無名クラスといいます。

String[] filenames = mywork.list(filter);

先ほどのリストメソッドを呼ぶときに引数としてこのフィルターを渡すと隠しファイルは表示されなくなります。

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

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

スポンサーリンク

シェアする

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

フォローする

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