• title: Fileの再帰的検索 tags: [File, JProgressBar, SwingWorker] author: aterai pubdate: 2003-12-15 description: ファイルを再帰的に検索します。

概要

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

サンプルコード

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を利用しています。


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;
    }
  });
}

参考リンク

コメント