Swing/RecursiveFileSearch のバックアップの現在との差分(No.15)
TITLE:Fileの再帰的検索
Posted by aterai at 2003-11-11
Fileの再帰的検索
ファイルを再帰的に検索します。- category: swing folder: RecursiveFileSearch title: Fileの再帰的検索 tags: [File, JProgressBar, SwingWorker] author: aterai pubdate: 2003-12-15 description: 指定したDirectory以下のFileを再帰的に検索し、その進捗状況をJProgressBarで表示します。 image:
概要
指定したDirectory
以下のFile
を再帰的に検索し、その進捗状況をJProgressBar
で表示します。
- &jar;
- &zip;
Screenshot
Advertisement
サンプルコード
サンプルコード
#spandel
public void recursiveSearch(File dir, final Vector list)
#spanend
throws InterruptedException {
String[] contents = dir.list();
for(int i=0;i<contents.length;i++) {
if(Thread.interrupted()) {
#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, contents[i]);
if(sdir.isDirectory()) {
File sdir = new File(dir, fname);
if (sdir.isDirectory()) {
recursiveSearch(sdir, list);
}else if(isGraphicsFile(sdir.getName())) {
} else {
scount++;
if (scount % 100 == 0) {
publish(new Message("Results:" + scount + "\n", false));
}
list.add(sdir);
}
}
}
View in GitHub: Java, Kotlin解説
上記のサンプルでは、選択したフォルダ以下のファイルを再帰的にすべて検索して表示するようになっています。解説
上記のサンプルでは、選択したフォルダ以下のファイルを再帰的にすべて検索して表示しています。JProgressBar
を使った進捗状況の表示とキャンセルにはSwingWorker
を利用しています。
JProgressBarを使った進捗状況の表示とキャンセルには、SwingWorkerを利用しています。JDK 7 の場合は、Files.walkFileTree(...) などを使用する方法もあります。
- Walking the File Tree (The Java™ Tutorials > Essential Classes > Basic I/O)
-
JDK 1.7.0
以上の場合は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()) {
if (Thread.interrupted()) {
throw new IOException();
}
if(attrs.isRegularFile()) {
if (attrs.isRegularFile()) {
list.add(file);
}
return FileVisitResult.CONTINUE;
}
});
}
参考リンク
- Java入門 ファイル
- Using a Swing Worker Thread
- How to Use Progress Bars
- SwingWorker.java
- Customize SwingWorker to improve Swing GUIs
- -
-
JDK 1.8.0
以上の場合はFiles.walk(Path)
を使用する方法もある
コメント
- 実際に動作するサンプルを追加してみました。 -- aterai
- JDK 6 のSwingWorkerを使用するように変更しました。 -- aterai
#spanend #spanadd import java.util.*; #spanend #spanadd import java.util.stream.*; #spanend #spanadd import java.io.IOException; #spanend #spanadd import java.nio.file.*; #spanend #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