Liste filer i en katalog i Java

1. Oversikt

I denne raske opplæringen vil vi se på forskjellige måter å liste filer i en katalog.

2. Oppføring

Hvis vi vil liste opp alle filene i katalogen og hoppe videre over å grave i underkataloger, kan vi bare bruke 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 introduserte Java 7 et raskere alternativ til File # listFiles kalt DirectoryStream.

La oss se hvordan ekvivalenten ser ut:

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 lett se det samtidig som DirectoryStream kan være raskere, det er ikke en del av Strøm API og er ikke like mottagelig for å jobbe med det.

Også, DirectoryStream krever at vi lukker ressursen, det vil si å pakke den inn med en prøv-med-ressurserogså.

4. Gå

Eller, vi kan liste opp alle filene i en katalog etter ing den til en konfigurert dybde.

La oss bruke java.nio.file.Files # walk for å liste opp alle filene i en katalog til en gitt dybde:

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

Husk selvfølgelig å bruke prøv-med-ressurser så filhåndtaket for dir blir ordentlig lukket.

Eller hvis vi vil ha mer kontroll over hva som skjer med hver fil du besøker, kan vi også tilby en besøkendeimplementering:

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

Dette er praktisk når vi vil lese ekstra, flytte eller slette filer mens vi går.

5. Konklusjon

I denne raske opplæringen utforsket vi forskjellige måter å liste opp filer i en katalog.

Som alltid er hele kildekoden til eksemplene tilgjengelig på GitHub.


$config[zx-auto] not found$config[zx-overlay] not found