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
レーティング
コメント