TITLE:Fileの再帰的検索

Fileの再帰的検索

編集者:Terai Atsuhiro~

作成日:2003-11-11
更新日:2024-02-02 (金) 12:02:25
  • category: swing folder: RecursiveFileSearch title: Fileの再帰的検索 tags: [File, JProgressBar, SwingWorker] author: aterai pubdate: 2003-12-15 description: 指定したDirectory以下のFileを再帰的に検索し、その進捗状況をJProgressBarで表示します。 image: https://lh6.googleusercontent.com/_9Z4BYR88imo/TQTRh7du1II/AAAAAAAAAhU/jcMUoOTcbTU/s800/RecursiveFileSearch.png

概要

指定したDirectory以下のFileを再帰的に検索し、その進捗状況をJProgressBarで表示します。

概要

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

サンプルコード

#spanend
#spanadd
private void recursiveSearch(File dir, final List<File> list)
#spanend
        throws InterruptedException {
  for (String fname : dir.list()) {
    if (Thread.interrupted()) {
      throw new InterruptedException();
    }
    File sdir = new File(dir, fname);
    if (sdir.isDirectory()) {
      recursiveSearch(sdir, list);
    } else {
      scount++;
      if (scount % 100 == 0) {
        publish(new Message("Results:" + scount + "\n", false));
      }
      list.add(sdir);
    }
  }
#spanadd
}
#spanend
#spanadd
View in GitHub: Java, Kotlin

#screenshot

解説

上記のサンプルでは、選択したフォルダ以下のファイルを再帰的にすべて検索して表示しています。JProgressBarを使った進捗状況の表示とキャンセルにはSwingWorkerを利用しています。

サンプルコード

  • -
 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);
     }
   }
 }
#spanadd
private void recursiveSearch(Path dir, final ArrayList<Path> list) throws IOException {
#spanend
  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;
    }
  });
#spanadd
}
#spanend
  • &jar;
  • &zip;

解説

上記のサンプルでは、選択したフォルダ以下のファイルを再帰的にすべて検索して表示するようになっています。
  • -
JProgressBarを使った進捗状況の表示とキャンセルには、SwingWorkerを利用しています。以下のリンクなどを参考にしてみてください。
#spanend
#spanadd
import java.util.*;
#spanend
#spanadd
import java.util.stream.*;
#spanend
#spanadd
import java.io.IOException;
#spanend
#spanadd
import java.nio.file.*;
#spanend

#spandel
**参考リンク [#oc687cdf]
#spanend
-[[Java入門 ファイル>http://msugai.fc2web.com/java/IO/fileObj.html]]
-[[Using a Swing Worker Thread>http://java.sun.com/products/jfc/tsc/articles/threads/threads2.html]]
-[[How to Use Progress Bars>http://java.sun.com/docs/books/tutorial/uiswing/components/progress.html]]
-[[SwingWorker.java>http://java.sun.com/products/jfc/tsc/articles/threads/src/SwingWorker.java]]
-[[Customize SwingWorker to improve Swing GUIs>http://www.javaworld.com/javaworld/jw-06-2003/jw-0606-swingworker-p3.html]]
#spanadd
public class FilesWalkTest {
#spanend
  public static void main(String[] args) {
    Path dir = Paths.get(".");
    // Files.walk(dir).forEach(System.out::println);
    try (Stream<Path> s = Files.walk(dir).filter(Files::isRegularFile)) {
      List<Path> l = s.collect(Collectors.toList());
      System.out.println(l.size());
    } catch (IOException ex) {
      ex.printStackTrace();
    }
  }
#spanadd
}
#spanend
#spanadd

コメント

  • 実際に動作するサンプルを追加してみました。 -- terai

参考リンク

コメント