Swing/RecursiveFileSearch のバックアップの現在との差分(No.1)
#navi(contents-page-name): No such page: ST
FrontPage>Swing Tips?>ST/Recursive?
ST/Recursive?
2024-02-02 (金) 12:02:25
概要
指定したDirectory
以下のFile
を再帰的に検索し、その進捗状況をJProgressBar
で表示します。
Screenshot
Advertisement
private void recursiveFiles(File dir, final Vector list){ String[] contents = dir.list(); for(int i=0;i<contents.length;i++){ File sdir = new File(dir, contents[i]); if(sdir.isDirectory()){ recursiveFiles(sdir, list); }else if(sdir.getName().toLowerCase().endsWith(".jpg")){ list.add(sdir); } } }
サンプルコード
#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解説
上記のサンプルでは、選択したフォルダ以下のファイルを再帰的にすべて検索して表示しています。JProgressBar
を使った進捗状況の表示とキャンセルにはSwingWorker
を利用しています。
- JTOpen: An open-source Java toolbox for the IBM iSeries
- -
-
JDK 1.7.0
以上の場合はFiles.walkFileTree(...)
を使用する方法もある
#spanend
#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
#spanadd
- -
-
JDK 1.8.0
以上の場合はFiles.walk(Path)
を使用する方法もある
#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
#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