Java フォルダの再帰処理

ブログ » Java フォルダの再帰処理

13 Sep 2019 14:09公開

Javaフォルダ再帰処理にJava8にNIO walkFileTreeという新しい方法が提供されました。

public static Path walkFileTree(Path start,FileVisitor<? super Path> visitor)
throws IOException

ファイル・ツリーのすべてのレベルをビジットします。
パラメータ:
start - 開始ファイル
visitor - 各ファイルに対して呼び出すファイル・ビジター
public FileVisitResult visitFile(T file,BasicFileAttributes attrs)
throws IOException

ファイルのビジターです。このインタフェースの実装は、ファイル・ツリー内の各ファイルをビジットするFiles.walkFileTreeメソッドに渡されます。

オフィシャルのドキュメントは下記になります。
https://docs.oracle.com/javase/jp/8/docs/api/java/nio/file/Files.html#walkFileTree-java.nio.file.Path-java.nio.file.FileVisitor-

早速サンプルを確認しましょう。
MyFileVisitor.java

package sample.nio;
 
import java.io.IOException;
import java.nio.file.FileVisitResult;
import java.nio.file.FileVisitor;
import java.nio.file.Path;
import java.nio.file.attribute.BasicFileAttributes;
 
import org.apache.commons.lang3.text.StrBuilder;
 
public class MyFileVisitor implements FileVisitor<Path> {
    protected int indentSize;
 
    @Override
    public FileVisitResult preVisitDirectory(Path dir, BasicFileAttributes attrs) throws IOException {
        print("preVisitDirectory : " + dir.getFileName());
        this.indentSize++;
        return FileVisitResult.CONTINUE;
    }
 
    @Override
    public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException {
        print("visitFile : " + file.getFileName());
        return FileVisitResult.CONTINUE;
    }
 
    @Override
    public FileVisitResult postVisitDirectory(Path dir, IOException exc) throws IOException {
        this.indentSize--;
        print("postVisitDirectory : " + dir.getFileName());
        return FileVisitResult.CONTINUE;
    }
 
    @Override
    public FileVisitResult visitFileFailed(Path file, IOException exc) throws IOException {
        String error = String.format(" [exception=%s, message=%s]", exc.getClass(), exc.getMessage());
 
        print("visitFileFailed : " + file.getFileName() + error);
 
        return FileVisitResult.CONTINUE;
    }
 
    protected void print(String message) {
        System.out.println(new StrBuilder().appendPadding(this.indentSize, ' ').append(message));
    }
 
    public static void main(String[] args) throws IOException {
        Path start = Paths.get("nio");
        FileVisitor<Path> visitor = new MyFileVisitor();
 
        Files.walkFileTree(start, visitor);
    }
}

Reference
https://itsakura.com/java-file-list
https://qiita.com/opengl-8080/items/7e75d194b22f0a54905f

レーティング

rating: 0+x

コメント

Add a New Comment