2013-02-15 3 views
13

У меня есть код обхода I/0 файла, написанный на Java 6, пытаясь переместить его в новый ввод-вывод в Java 7, но я не могу найти замену такого рода материалам.Как заменить File.listFiles (фильтр FileFilter) на nio в Java 7?

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

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

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

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

ответ

22

Использование Files#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, я опустил обработку в приведенном выше коде для простоты исключение.

+0

ах, который пропустил меня, спасибо. –

+0

Несмотря на то, что если вы хотите передать список файлов другому методу (который я делаю, файлы обрабатываются в другом потоке), бит беспорядочный, чтобы вы прокручивали файлы и добавляли их в список –

+0

Вместо того, чтобы передавать список, вы могли бы просто передайте поток другому методу. В зависимости, конечно, от того, управляете ли вы типом параметра указанного метода. Если нет, вы абсолютно правы, нет смысла перебирать одну структуру списка, чтобы добавить контент в другую структуру списка. – Silwing

Смежные вопросы