Подтвердить что ты не робот

Как заменить File.listFiles(фильтр FileFilter) на nio в Java 7?

У меня есть код обхода I/0 файла, написанный на Java 6, который пытается перенести его в новый я/я в Java 7, но я не могу найти замену такого рода материала.

File[] files = dir.listFiles(AudioFileFilter.getInstance());

А именно, никоим образом не фильтровать пути только файлы, и он возвращает список файлов, поэтому мне пришлось бы преобразовать каждый файл в путь (file.toPath), если бы я хотел ограничить использование файла в методах, которые он вызывает, что представляется довольно трудоемким.

Я смотрел FileVisitor, но это, похоже, не позволяет вам контролировать, как проходит дерево, поэтому я не думаю, что это сработает для меня.

Итак, какая часть замены - это путь для файла в Java 7?

4b9b3361

Ответ 1

Использование Файлы # newDirectoryStream и DirectoryStream.Filter

Вот код:

DirectoryStream<Path> stream = Files.newDirectoryStream(dir, new DirectoryStream.Filter<Path>() {

        @Override
        public boolean accept(Path entry) throws IOException 
        {
            return Files.isDirectory(entry);
        }
    });

for (Path entry: stream) {
      ...
}

BTW, я пропустил обработку исключений в приведенном выше коде для простоты.