Интерфейс 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 |
Вызывается для каталога после посещения записей в каталоге и всех его потомков. |
FileVisitResult |
preVisitDirectory |
Вызывается для каталога перед посещением записей в каталоге. |
FileVisitResult |
visitFile |
Вызывается для файла в каталоге. |
FileVisitResult |
visitFileFailed |
Вызывается для файла, который не удалось посетить. |
Подробное описание методов
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, 2021, 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/17/docs/api/java.base/java/nio/file/FileVisitor.html