モジュール java.base
パッケージ java.nio.file

インタフェースFileVisitor<T>

型パラメータ:
T - ファイル/ディレクトリのタイプ
既知のすべての実装クラス:
SimpleFileVisitor

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

使用例: ファイル・ツリーを削除するとします。 その場合、各ディレクトリの削除は、そのディレクトリ内のエントリを削除したあとで行うようにしてください。

     Path start = ...
     Files.walkFileTree(start, new SimpleFileVisitor<Path>() {
         @Override
         public FileVisitResult visitFile(Path file, BasicFileAttributes attrs)
             throws IOException
         {
             Files.delete(file);
             return FileVisitResult.CONTINUE;
         }
         @Override
         public FileVisitResult postVisitDirectory(Path dir, IOException e)
             throws IOException
         {
             if (e == null) {
                 Files.delete(dir);
                 return FileVisitResult.CONTINUE;
             } else {
                 // directory iteration failed
                 throw e;
             }
         }
     });
 

さらに、ファイル・ツリーをターゲットの場所にコピーするとします。 その場合、シンボリック・リンクをたどり、ターゲット・ディレクトリを作成してから、そのディレクトリ内のエントリをコピーするようにしてください。

     final Path source = ...
     final Path target = ...

     Files.walkFileTree(source, EnumSet.of(FileVisitOption.FOLLOW_LINKS), Integer.MAX_VALUE,
         new SimpleFileVisitor<Path>() {
             @Override
             public FileVisitResult preVisitDirectory(Path dir, BasicFileAttributes attrs)
                 throws IOException
             {
                 Path targetdir = target.resolve(source.relativize(dir));
                 try {
                     Files.copy(dir, targetdir);
                 } catch (FileAlreadyExistsException e) {
                      if (!Files.isDirectory(targetdir))
                          throw e;
                 }
                 return CONTINUE;
             }
             @Override
             public FileVisitResult visitFile(Path file, BasicFileAttributes attrs)
                 throws IOException
             {
                 Files.copy(file, target.resolve(source.relativize(file)));
                 return CONTINUE;
             }
         });
 

導入されたバージョン:
1.7
  • メソッドの詳細

    • preVisitDirectory

      ディレクトリ内のエントリがビジットされる前に、そのディレクトリに対して呼び出されます。

      このメソッドがCONTINUEを返す場合、ディレクトリ内のエントリがビジットされます。 このメソッドがSKIP_SUBTREEまたはSKIP_SIBLINGSを返す場合、ディレクトリ(およびすべての子孫)内のエントリはビジットされません。

      パラメータ:
      dir - ディレクトリへの参照
      attrs - ディレクトリの基本属性
      戻り値:
      ビジットの結果
      例外:
      IOException - 入出力エラーが発生した場合
    • visitFile

      ディレクトリ内のファイルに対して呼び出されます。
      パラメータ:
      file - ファイルへの参照
      attrs - ファイルの基本属性
      戻り値:
      ビジットの結果
      例外:
      IOException - 入出力エラーが発生した場合
    • visitFileFailed

      ビジットできなかったファイルに対して呼び出されます。 このメソッドは、ファイルの属性を読み取れなかったり、ファイルが開けないディレクトリだったりなどの理由の場合に呼び出されます。
      パラメータ:
      file - ファイルへの参照
      exc - ファイルへのビジットを妨げた入出力例外
      戻り値:
      ビジットの結果
      例外:
      IOException - 入出力エラーが発生した場合
    • postVisitDirectory

      ディレクトリ内のエントリ、およびそのすべての子孫がビジットされたあとにそのディレクトリに対して呼び出されます。 このメソッドは、ディレクトリの反復処理が早く完了しすぎた場合(visitFileメソッドがSKIP_SIBLINGSを返したり、ディレクトリに対する反復処理時に入出力エラーが発生したりすることにより)にも呼び出されます。
      パラメータ:
      dir - ディレクトリへの参照
      exc - エラーが発生せずにディレクトリの反復が完了した場合はnull、そうでない場合はディレクトリの反復が早く完了させた入出力例外
      戻り値:
      ビジットの結果
      例外:
      IOException - 入出力エラーが発生した場合