Added in [API level 26](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels) Summary: [Methods](https://developer.android.com/reference/java/nio/file/FileVisitor#pubmethods)

# FileVisitor


`
public


interface
FileVisitor
`


`


`

|---|
| java.nio.file.FileVisitor\<T\> |

|---|
| Known indirect subclasses [SimpleFileVisitor](https://developer.android.com/reference/java/nio/file/SimpleFileVisitor)\<T\> |---|---| | [SimpleFileVisitor](https://developer.android.com/reference/java/nio/file/SimpleFileVisitor)\<T\> | A simple visitor of files with default behavior to visit all files and to re-throw I/O errors. | |

<br />

*** ** * ** ***

A visitor of files. An implementation of this interface is provided to the
`https://developer.android.com/reference/java/nio/file/Files#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 />

## Summary

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

## Public methods

### postVisitDirectory

Added in [API level 26](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public abstract FileVisitResult postVisitDirectory (T dir, 
                IOException 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://developer.android.com/reference/java/nio/file/FileVisitor#visitFile(T,%20java.nio.file.attribute.BasicFileAttributes)`
method returning `https://developer.android.com/reference/java/nio/file/FileVisitResult#SKIP_SIBLINGS`,
or an I/O error when iterating over the directory).

<br />

| Parameters ||
|---|---|
| `dir` | `T`: a reference to the directory <br /> |
| `exc` | `IOException`: `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 <br /> |

| Returns ||
|---|---|
| `https://developer.android.com/reference/java/nio/file/FileVisitResult` | the visit result <br /> |

| Throws ||
|---|---|
| `https://developer.android.com/reference/java/io/IOException` | if an I/O error occurs |

### preVisitDirectory

Added in [API level 26](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public abstract FileVisitResult preVisitDirectory (T dir, 
                BasicFileAttributes attrs)
```

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

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

<br />

| Parameters ||
|---|---|
| `dir` | `T`: a reference to the directory <br /> |
| `attrs` | `BasicFileAttributes`: the directory's basic attributes <br /> |

| Returns ||
|---|---|
| `https://developer.android.com/reference/java/nio/file/FileVisitResult` | the visit result <br /> |

| Throws ||
|---|---|
| `https://developer.android.com/reference/java/io/IOException` | if an I/O error occurs |

### visitFile

Added in [API level 26](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public abstract FileVisitResult visitFile (T file, 
                BasicFileAttributes attrs)
```

Invoked for a file in a directory.

<br />

| Parameters ||
|---|---|
| `file` | `T`: a reference to the file <br /> |
| `attrs` | `BasicFileAttributes`: the file's basic attributes <br /> |

| Returns ||
|---|---|
| `https://developer.android.com/reference/java/nio/file/FileVisitResult` | the visit result <br /> |

| Throws ||
|---|---|
| `https://developer.android.com/reference/java/io/IOException` | if an I/O error occurs |

### visitFileFailed

Added in [API level 26](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public abstract FileVisitResult visitFileFailed (T file, 
                IOException 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.

<br />

| Parameters ||
|---|---|
| `file` | `T`: a reference to the file <br /> |
| `exc` | `IOException`: the I/O exception that prevented the file from being visited <br /> |

| Returns ||
|---|---|
| `https://developer.android.com/reference/java/nio/file/FileVisitResult` | the visit result <br /> |

| Throws ||
|---|---|
| `https://developer.android.com/reference/java/io/IOException` | if an I/O error occurs |