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.