2013-02-15 17 views
13

Mam pewien plik kodu przejścia I/O napisany w Javie 6, próbując przenieść go do nowego I/O w Javie 7, ale nie mogę znaleźć żadnego zamiennika dla tego rodzaju rzeczy.Jak zamienić File.listFiles (filtr FileFilter) na nio w Javie 7?

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

Mianowicie, nie ma mowy, aby filtrować ścieżek tylko pliki, i zwraca listę plików, tak bym wtedy przekonwertować każdy plik do ścieżki (file.toPath) gdybym chciał ograniczyć korzystanie z plików w metodach wzywa, co wydaje się dość pracochłonne.

Spojrzałem na FileVisitor, ale wydaje mi się, że nie pozwala to kontrolować przebiegu drzewa, więc nie sądzę, że będzie ono działało dla mnie.

Jaką część zamiennika stanowi Ścieżka do pliku w języku Java 7?

Odpowiedz

22

Stosując Files#newDirectoryStream i DirectoryStream.Filter

tutaj kod:

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

okazji, że pominąć obsługę wyjątków w powyższym kodu dla uproszczenia.

+0

ah, że tęskniłem za mną, dziękuję. –

+0

AHow jeśli chcesz przekazać listę plików do innej metody (co robię pliki są przetwarzane na inny wątek) trochę niechlujny, że będziesz iterować wokół plików i dodać je do listy –

+0

Zamiast przekazywać listę można po prostu przekazuj strumień do innej metody. W zależności oczywiście od tego, czy kontrolujesz typ parametru tej metody. Jeśli nie masz absolutnie racji, nie ma sensu iterować struktury listy tylko po to, aby dodać zawartość do innej struktury listy. – Silwing