Spec-Zone.ru › OpenJDK 25

Интерфейс 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

Краткое описание методов

Модификатор и тип Метод Описание
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 - если возникает ошибка ввода-вывода

Сообщить об ошибке или предложить улучшение
Дополнительную справочную информацию по API и документацию для разработчиков см. в разделе Документация Java SE, содержащем более подробные описания для разработчиков, концептуальные обзоры, определения терминов, обходные решения и рабочие примеры кода. Другие версии.
Java является товарным знаком или зарегистрированным товарным знаком Oracle и/или её аффилированных лиц в США и других странах.
Авторское право © 1993, 2025, Oracle и/или её аффилированные лица, 500 Oracle Parkway, Redwood Shores, CA 94065 USA.
Все права защищены. Использование регулируется условиями лицензии и политикой распространения документации.

© 1993, 2025, 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/25/docs/api/java.base/java/nio/file/FileVisitor.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API