TITLE:Fileの再帰的検索

Posted by at 2003-11-11

Fileの再帰的検索

ファイルを再帰的に検索します。

  • &jar;
  • &zip;
RecursiveFileSearch.png

サンプルコード

public void recursiveSearch(File dir, final Vector list)
    throws InterruptedException {
  String[] contents = dir.list();
  for(int i=0;i<contents.length;i++) {
    if(Thread.interrupted()) {
      throw new InterruptedException();
    }
    File sdir = new File(dir, contents[i]);
    if(sdir.isDirectory()) {
      recursiveSearch(sdir, list);
    }else if(isGraphicsFile(sdir.getName())) {
      list.add(sdir);
    }
  }
}
View in GitHub: Java, Kotlin

解説

上記のサンプルでは、選択したフォルダ以下のファイルを再帰的にすべて検索して表示するようになっています。

JProgressBarを使った進捗状況の表示とキャンセルには、SwingWorkerを利用しています。以下のリンクなどSwingWorker (Java Platform SE 6)を参考にしてみてください。


JDK 7 の場合は、Files.walkFileTree(...) などを使用する方法もあります。

private void recursiveSearch(Path dir, final ArrayList<Path> list) throws IOException {
  Files.walkFileTree(dir, new SimpleFileVisitor<Path>() {
    @Override public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException {
      if(Thread.interrupted()) {
        throw new IOException();
      }
      if(attrs.isRegularFile()) {
        list.add(file);
      }
      return FileVisitResult.CONTINUE;
    }
  });
}

参考リンク

コメント

  • 実際に動作するサンプルを追加してみました。 -- aterai
  • JDK 6 のSwingWorkerを使用するように変更しました。 -- aterai