Интерфейс FileVisitor<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
Методы
| Модификатор и тип | Метод | Описание |
|---|---|---|
FileVisitResult | postVisitDirectory(T dir,
IOException exc) | Вызывается для каталога после того, как были посещены элементы в каталоге и все их потомки. |
FileVisitResult | preVisitDirectory(T dir,
BasicFileAttributes attrs) | Вызывается для каталога перед посещением элементов в каталоге. |
FileVisitResult | visitFile(T file,
BasicFileAttributes attrs) | Вызывается для файла в каталоге. |
FileVisitResult | visitFileFailed(T file,
IOException exc) | Вызывается для файла, который не удалось посетить. |
Методы
preVisitDirectory
FileVisitResult preVisitDirectory(T dir,
BasicFileAttributes attrs)
throws IOExceptionВызывается для каталога перед посещением элементов в каталоге.
Если этот метод возвращает CONTINUE, то элементы в каталоге посещаются. Если этот метод возвращает SKIP_SUBTREE или SKIP_SIBLINGS, то элементы в каталоге (и любые потомки) не будут посещены.
- Параметры:
dir- ссылка на каталогattrs- базовые атрибуты каталога- Возвращает:
- результат посещения
- Исключения:
IOException- если произошла ошибка ввода-вывода
visitFile
FileVisitResult visitFile(T file,
BasicFileAttributes attrs)
throws IOExceptionВызывается для файла в каталоге.
- Параметры:
file- ссылка на файлattrs- базовые атрибуты файла- Возвращает:
- результат посещения
- Исключения:
IOException- если произошла ошибка ввода-вывода
visitFileFailed
FileVisitResult visitFileFailed(T file,
IOException exc)
throws IOExceptionВызывается для файла, который не удалось посетить. Этот метод вызывается, если атрибуты файла не могут быть прочитаны, файл является каталогом, который не удалось открыть, и по другим причинам.
- Параметры:
file- ссылка на файлexc- исключение ввода-вывода, которое помешало посещению файла- Возвращает:
- результат посещения
- Исключения:
IOException- если произошла ошибка ввода-вывода
postVisitDirectory
FileVisitResult postVisitDirectory(T dir,
IOException exc)
throws IOExceptionВызывается для каталога после того, как были посещены элементы в каталоге и все их потомки. Этот метод также вызывается, когда итерация каталога завершается преждевременно (методом visitFile, возвращающим SKIP_SIBLINGS, или при ошибке ввода-вывода во время итерации по каталогу).
- Параметры:
dir- ссылка на каталогexc-nullесли итерация по каталогу завершилась без ошибки; в противном случае исключение ввода-вывода, которое вызвало преждевременное завершение итерации по каталогу- Возвращает:
- результат посещения
- Исключения:
IOException- если произошла ошибка ввода-вывода
© 1993, 2020, Oracle and/or its affiliates. All rights reserved.
Documentation extracted from Debian's OpenJDK Development Kit package.
Licensed under the GNU General Public License, version 2, with the Classpath Exception.
Various third party code in OpenJDK is licensed under different licenses (see Debian package).
Java and OpenJDK are trademarks or registered trademarks of Oracle and/or its affiliates.
https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/nio/file/FileVisitor.html