Fájlok listázása a Java könyvtárban

1. Áttekintés

Ebben a gyors bemutatóban különböző módszereket vizsgálunk meg fájlokat listázhat egy könyvtárban.

2. Felsorolás

Ha fel akarjuk sorolni az összes fájlt a könyvtárban, és kihagyjuk az alkönyvtárakba ásást, egyszerűen használhatjuk 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

A Java 7 azonban egy gyorsabb alternatívát vezetett be nak nek File # listFiles hívott DirectoryStream.

Lássuk, hogyan néz ki az egyenértékű:

public Set listFilesUsingDirectoryStream (String dir) dobja az IOException {Set fileList = new HashSet (); próbálkozzon (DirectoryStream stream = Files.newDirectoryStream (Paths.get (dir))) {for (Útvonal elérési útja: stream) {if (! Files.isDirectory (elérési út)) {fileList.add (path.getFileName () .toString () ); }}} return fileList; }

Ezt könnyen láthatjuk míg DirectoryStream gyorsabb lehet, nem része a Folyam API és nem annyira alkalmas arra, hogy dolgozzon vele.

Is, DirectoryStream megköveteli, hogy zárjuk be az erőforrást, vagyis azt csomagoljuk egy erőforrásokkal próbálkozzon, is.

4. Séta

Vagy, a könyvtárban található összes fájlt felsorolhatjuk sétaazt konfiguráltnak mélység.

Használjuk java.nio.file.Files # walk egy könyvtárban található fájlok megadott mélységig történő felsorolásához:

public Set listFilesUsingFileWalk (String dir, int depth) dobja az IOException-t {try (Stream stream = Files.walk (Paths.get (dir), mélység)) {return stream .filter (file ->! Files.isDirectory (file)). térkép (Path :: getFileName) .map (Path :: toString) .collect (Collectors.toSet ()); }}

Természetesen ne felejtse el használni erőforrásokkal próbálkozzon tehát a fájlkezelő rend rendesen bezárul.

Vagy ha jobban szeretnénk ellenőrizni, hogy mi történik az egyes meglátogatott fájlokkal, látogatói megvalósítást is biztosíthatunk:

public Set listFilesUsingFileWalkAndVisitor (String dir) dobja az IOException {Set FileList = new HashSet (); Files.walkFileTree (Paths.get (dir), új SimpleFileVisitor () {@Orride public FileVisitResult visitFile (elérési út, BasicFileAttributes attrs) dobja az IOException {if (! Files.isDirectory (fájl)) {fileList.add } .toString ());} return FileVisitResult.CONTINUE;}}); return fileList; }

Ez akkor hasznos, ha további fájlokat akarunk olvasni, áthelyezni vagy törölni.

5. Következtetés

Ebben a gyors bemutatóban különböző módszereket tártunk fel a fájlok listázására egy könyvtárban.

Mint mindig, a példák teljes forráskódja elérhető a GitHubon.