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

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

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

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

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

Итак, сколько заменится путь к файлу в Java 7?

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) {
      ...
}

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

Другие вопросы по тегам