Ellenőrizze, hogy egy Java könyvtár üres-e
1. Áttekintés
Ebben a gyors bemutatóban megismerünk néhány módot annak kiderítésére, hogy egy könyvtár üres-e vagy sem.
2. Használata Files.newDirectoryStream
A Java 7-től kezdve a Files.newDirectoryStream metódus a DirectoryStream a könyvtár összes bejegyzésének ismétléséhez. Tehát ezt az API-t használhatjuk annak ellenőrzésére, hogy az adott könyvtár üres-e vagy sem:
nyilvános logikai isEmpty (elérési út) az IOException-t dobja {if (Files.isDirectory (elérési út)) {try (DirectoryStream könyvtár = Files.newDirectoryStream (elérési út)) {return! directory.iterator (). hasNext (); }} return false; }
Nem könyvtárbeli bemenetek esetén visszatérünk hamis anélkül, hogy megpróbálná betölteni a könyvtár bejegyzéseket:
Elérési út aPile = Paths.get (getClass (). GetResource ("/ notDir.txt"). ToURI ()); assertThat (isEmpty (aFile)). isFalse ();
Másrészt, ha a bemenet könyvtár, akkor megpróbálunk megnyitni egy DirectoryStream abba a könyvtárba. Akkor a könyvtárat akkor tekintjük üresnek, ha csak akkor, ha az első hasNext () method call return hamis. Egyébként nem üres:
Path currentDir = új fájl (""). ToPath (). ToAbsolutePath (); assertThat (isEmpty (currentDir)). isFalse ();
A DirectoryStream egy Bezárható erőforrás, ezért egy try-with-resources blokkba csomagoljuk. Ahogy számíthatunk rá, a üres metódus visszatér igaz üres könyvtárak esetén:
Elérési útvonal = Files.createTempDirectory ("baeldung-empty"); assertThat (isEmpty (elérési út)). isTrue ();
Itt használjuk a Files.createTempDirectory üres és ideiglenes könyvtár létrehozásához.
3. Használata Files.list
A JDK 8-tól kezdődően a Files.list módszer a Files.newDirectoryStream Belső API az a Folyam. Minden egyes Pálya egy bejegyzés az adott szülőkönyvtárban. Ezért ugyanarra a célra használhatjuk ezt az API-t is:
public boolean isEmpty (Útvonal elérési útja) dobja az IOException {if (Files.isDirectory (path)) {try (Stream bejegyzések = Files.list (elérési út)) {return! entry.findFirst (). isPresent (); }} return false; }
Megint csak az első bejegyzéshez nyúlunk a findFirst módszer. Ha a visszaküldött Választható üres, akkor a könyvtár is üres.
A Folyam I / O erőforrás támogatja, ezért ügyeljünk arra, hogy megfelelő módon kiadjuk a try-with-resources blokkot.
4. Nem hatékony megoldások
Mindkét Files.list és Files.newDirectoryStream lustán fogja ismételni a könyvtár bejegyzéseket. Ezért hatalmas könyvtárakkal fognak nagyon hatékonyan dolgozni. Az ilyen megoldások azonban nem fognak jól működni ebben a forgatókönyvben:
public boolean isEmpty (Path path) {return path.toFile (). listFiles (). length == 0; }
Ez lelkesen tölti be az összes bejegyzést a könyvtárba, ami elég hatékony lesz, ha hatalmas könyvtárakat kezel.
5. Következtetés
Ebben a rövid bemutatóban megismerhettünk néhány hatékony módszert annak ellenőrzésére, hogy egy könyvtár üres-e vagy sem.
Szokás szerint az összes példa elérhető a GitHubon.