JDK 7 ならこう?
ちょっと勉強になるブログを発見した。
http://d.hatena.ne.jp/bleis-tift/20090616/1245134308
http://d.hatena.ne.jp/shin/20090618/p2
ついでに以前試した JDK 7 の walkFileTree を使ったチュートリアルをもとにゴニョゴニョしてみた。
特定ディレクトリ以下の列挙 ということなので見栄えは良くないが JDK 7 ならこんなのもありかな?
import java.io.IOException;
import java.nio.file.FileRef;
import java.nio.file.FileSystems;
import java.nio.file.FileVisitOption;
import java.nio.file.FileVisitResult;
import java.nio.file.FileVisitor;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.PathMatcher;
import java.nio.file.Paths;
import java.nio.file.attribute.BasicFileAttributes;
import java.util.EnumSet;
public class Find {
public static class Finder implements FileVisitor {
private final PathMatcher matcher;
Finder(String pattern) {
matcher = FileSystems.getDefault().getPathMatcher("glob:" + pattern);
}
void find(Path file) {
if (matcher.matches(file.getName())) {
System.out.format("%s%n", file);
}
}
@Override
public FileVisitResult preVisitDirectory(FileRef dir) {
return FileVisitResult.CONTINUE;
}
@Override
public FileVisitResult preVisitDirectoryFailed(FileRef dir, IOException exc) {
return FileVisitResult.CONTINUE;
}
@Override
public FileVisitResult visitFile(FileRef file, BasicFileAttributes attrs) {
find((Path) file);
return FileVisitResult.CONTINUE;
}
@Override
public FileVisitResult visitFileFailed(FileRef file, IOException exc) {
return FileVisitResult.CONTINUE;
}
@Override
public FileVisitResult postVisitDirectory(FileRef dir, IOException exc) {
return FileVisitResult.CONTINUE;
}
}
public static void main(String[] args) {
Path searchDir = Paths.get("C:\\ターゲットディレクトリ");
String pattern = "*";
EnumSet<FileVisitOption> opts = EnumSet.of(FileVisitOption.FOLLOW_LINKS);
Finder finder = new Finder(pattern);
Files.walkFileTree(searchDir, opts, Integer.MAX_VALUE, finder);
}
}
基本的に間違っていたらごめんさない。
素人のやることだから笑ってゆるしてね(^^;
追記 List<String> result に格納するのがポイントだったのかな?
Tags: Java
おー
java.nio.file新設されたんですね。
ノーチェックでした。
修行が足りません。
JDK 7 の目玉は nio2 だったりして(^^;
おー、これは便利そうですね。
List result に格納するのがポイント・・・まぁそうですけど、これならそれにも十分対応できますし、いいんじゃないでしょうか。
クロージャが追加されないのとか色々と残念だった JDK 7 ですけど、API の進化はなかなかいい感じですね。
クロージャは話題になっていたけど間に合いませんでしたね。
でも、ジェームス・ゴスリンさんが薦めているからそのうち搭載されるのではないでしょうか。
その時までゆっくり楽しみに待っています。