Liste filer i et bibliotek i Java

1. Oversigt

I denne hurtige vejledning ser vi på forskellige måder at liste filer i et bibliotek.

2. Notering

Hvis vi vil liste alle filerne i biblioteket og springe videre over at grave i underkataloger, kan vi simpelthen bruge java.io.File # listFiles:

public Set listFilesUsingJavaIO (String dir) {return Stream.of (new File (dir) .listFiles ()) .filter (file ->! file.isDirectory ()) .map (File :: getName) .collect (Collectors.toSet ()); }

3. DirectoryStream

Imidlertid introducerede Java 7 et hurtigere alternativ til File # listFiles hedder DirectoryStream.

Lad os se, hvad ækvivalenten ser ud:

public Set listFilesUsingDirectoryStream (String dir) kaster IOException {Set fileList = new HashSet (); prøv (DirectoryStream stream = Files.newDirectoryStream (Paths.get (dir))) {for (Path path: stream) {if (! Files.isDirectory (path)) {fileList.add (path.getFileName () .toString () ); }}} returner fileList; }

Vi kan let se det mens DirectoryStream kan være hurtigere, det er ikke en del af Strøm API og er ikke lige så modtagelig for at arbejde med det.

Også, DirectoryStream kræver, at vi lukker ressourcen, hvilket betyder at indpakke den med en prøv med ressourcer, også.

4. Walking

Eller, Vi kan liste alle filerne i en mappe efter ing det til en konfigureret dybde.

Lad os bruge java.nio.file.Files # gå for at liste alle filerne i en mappe til en given dybde:

public Set listFilesUsingFileWalk (String dir, int depth) kaster IOException {try (Stream stream = Files.walk (Paths.get (dir), depth)) {return stream .filter (file ->! Files.isDirectory (file)). kort (Sti :: getFileName). kort (Sti :: toString) .collect (Collectors.toSet ()); }}

Husk selvfølgelig at bruge prøv med ressourcer så filhåndtaget til dir lukkes ordentligt.

Eller hvis vi vil have mere kontrol over, hvad der sker med hver besøgte fil, kan vi også levere en besøgendeimplementering:

public Set listFilesUsingFileWalkAndVisitor (String dir) kaster IOException {Set fileList = new HashSet (); Files.walkFileTree (Paths.get (dir), ny SimpleFileVisitor () {@Override public FileVisitResult visitFile (Path file, BasicFileAttribute attrs) throw IOException {if (! Files.isDirectory (file)) {fileList.add (file.getFileName ( ) .toString ());} returner FileVisitResult.CONTINUE;}}); returner fileList; }

Dette er praktisk, når vi vil foretage yderligere læsning, flytning eller sletning af filer, mens vi går.

5. Konklusion

I denne hurtige vejledning undersøgte vi forskellige måder at liste filer i et bibliotek på.

Som altid er den fulde kildekode for eksemplerne tilgængelig på GitHub.