# FileVisitor

public interface **FileVisitor**

|---|---|---|
| Known Indirect Subclasses [SimpleFileVisitor](https://developers.google.com/j2objc/javadoc/jre/reference/java/nio/file/SimpleFileVisitor.html)\<T\> |---|---| | [SimpleFileVisitor](https://developers.google.com/j2objc/javadoc/jre/reference/java/nio/file/SimpleFileVisitor.html)\<T\> | A simple visitor of files with default behavior to visit all files and to re-throw I/O errors. | |||

A visitor of files. An implementation of this interface is provided to the
`https://developers.google.com/j2objc/javadoc/jre/reference/java/nio/file/Files.html#walkFileTree(java.nio.file.Path,%20java.nio.file.FileVisitor<?%20super%20java.nio.file.Path>)` methods to visit each file in
a file tree.

**Usage Examples:**
Suppose we want to delete a file tree. In that case, each directory should
be deleted after the entries in the directory are deleted.

```
     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;
             }
         }
     });
 
```

Furthermore, suppose we want to copy a file tree to a target location.
In that case, symbolic links should be followed and the target directory
should be created before the entries in the directory are copied.

```
     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;
             }
         });
 
```

<br />

### Public Method Summary

|---|---|
| abstract [FileVisitResult](https://developers.google.com/j2objc/javadoc/jre/reference/java/nio/file/FileVisitResult.html) | [postVisitDirectory](https://developers.google.com/j2objc/javadoc/jre/reference/java/nio/file/FileVisitor.html#postVisitDirectory(T,%20java.io.IOException))(T dir, [IOException](https://developers.google.com/j2objc/javadoc/jre/reference/java/io/IOException.html) exc) Invoked for a directory after entries in the directory, and all of their descendants, have been visited. |
| abstract [FileVisitResult](https://developers.google.com/j2objc/javadoc/jre/reference/java/nio/file/FileVisitResult.html) | [preVisitDirectory](https://developers.google.com/j2objc/javadoc/jre/reference/java/nio/file/FileVisitor.html#preVisitDirectory(T,%20java.nio.file.attribute.BasicFileAttributes))(T dir, [BasicFileAttributes](https://developers.google.com/j2objc/javadoc/jre/reference/java/nio/file/attribute/BasicFileAttributes.html) attrs) Invoked for a directory before entries in the directory are visited. |
| abstract [FileVisitResult](https://developers.google.com/j2objc/javadoc/jre/reference/java/nio/file/FileVisitResult.html) | [visitFile](https://developers.google.com/j2objc/javadoc/jre/reference/java/nio/file/FileVisitor.html#visitFile(T,%20java.nio.file.attribute.BasicFileAttributes))(T file, [BasicFileAttributes](https://developers.google.com/j2objc/javadoc/jre/reference/java/nio/file/attribute/BasicFileAttributes.html) attrs) Invoked for a file in a directory. |
| abstract [FileVisitResult](https://developers.google.com/j2objc/javadoc/jre/reference/java/nio/file/FileVisitResult.html) | [visitFileFailed](https://developers.google.com/j2objc/javadoc/jre/reference/java/nio/file/FileVisitor.html#visitFileFailed(T,%20java.io.IOException))(T file, [IOException](https://developers.google.com/j2objc/javadoc/jre/reference/java/io/IOException.html) exc) Invoked for a file that could not be visited. |

## Public Methods

#### public abstract [FileVisitResult](https://developers.google.com/j2objc/javadoc/jre/reference/java/nio/file/FileVisitResult.html)
**postVisitDirectory**
(T dir, [IOException](https://developers.google.com/j2objc/javadoc/jre/reference/java/io/IOException.html) exc)

Invoked for a directory after entries in the directory, and all of their
descendants, have been visited. This method is also invoked when iteration
of the directory completes prematurely (by a `https://developers.google.com/j2objc/javadoc/jre/reference/java/nio/file/FileVisitor.html#visitFile(T,%20java.nio.file.attribute.BasicFileAttributes)`
method returning `https://developers.google.com/j2objc/javadoc/jre/reference/java/nio/file/FileVisitResult.html#SKIP_SIBLINGS`,
or an I/O error when iterating over the directory).

##### Parameters

| dir | a reference to the directory |
| exc | `null` if the iteration of the directory completes without an error; otherwise the I/O exception that caused the iteration of the directory to complete prematurely |
|---|---|

##### Returns

- the visit result

##### Throws

| [IOException](https://developers.google.com/j2objc/javadoc/jre/reference/java/io/IOException.html) | if an I/O error occurs |
|---|---|

#### public abstract [FileVisitResult](https://developers.google.com/j2objc/javadoc/jre/reference/java/nio/file/FileVisitResult.html)
**preVisitDirectory**
(T dir, [BasicFileAttributes](https://developers.google.com/j2objc/javadoc/jre/reference/java/nio/file/attribute/BasicFileAttributes.html) attrs)

Invoked for a directory before entries in the directory are visited.

If this method returns `https://developers.google.com/j2objc/javadoc/jre/reference/java/nio/file/FileVisitResult.html#CONTINUE`,
then entries in the directory are visited. If this method returns `https://developers.google.com/j2objc/javadoc/jre/reference/java/nio/file/FileVisitResult.html#SKIP_SUBTREE` or `https://developers.google.com/j2objc/javadoc/jre/reference/java/nio/file/FileVisitResult.html#SKIP_SIBLINGS` then entries in the
directory (and any descendants) will not be visited.

##### Parameters

| dir | a reference to the directory |
| attrs | the directory's basic attributes |
|---|---|

##### Returns

- the visit result

##### Throws

| [IOException](https://developers.google.com/j2objc/javadoc/jre/reference/java/io/IOException.html) | if an I/O error occurs |
|---|---|

#### public abstract [FileVisitResult](https://developers.google.com/j2objc/javadoc/jre/reference/java/nio/file/FileVisitResult.html)
**visitFile**
(T file, [BasicFileAttributes](https://developers.google.com/j2objc/javadoc/jre/reference/java/nio/file/attribute/BasicFileAttributes.html) attrs)

Invoked for a file in a directory.

##### Parameters

| file | a reference to the file |
| attrs | the file's basic attributes |
|---|---|

##### Returns

- the visit result

##### Throws

| [IOException](https://developers.google.com/j2objc/javadoc/jre/reference/java/io/IOException.html) | if an I/O error occurs |
|---|---|

#### public abstract [FileVisitResult](https://developers.google.com/j2objc/javadoc/jre/reference/java/nio/file/FileVisitResult.html)
**visitFileFailed**
(T file, [IOException](https://developers.google.com/j2objc/javadoc/jre/reference/java/io/IOException.html) exc)

Invoked for a file that could not be visited. This method is invoked
if the file's attributes could not be read, the file is a directory
that could not be opened, and other reasons.

##### Parameters

| file | a reference to the file |
| exc | the I/O exception that prevented the file from being visited |
|---|---|

##### Returns

- the visit result

##### Throws

| [IOException](https://developers.google.com/j2objc/javadoc/jre/reference/java/io/IOException.html) | if an I/O error occurs |
|---|---|