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.


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