Ellenőrizze, hogy létezik-e fájl vagy könyvtár a Java-ban

1. Áttekintés

Ebben a gyors bemutatóban megismerkedünk egy fájl vagy könyvtár létezésének ellenőrzésének különböző módjaival.

Először a modern NIO API-kkal kezdjük, majd a régi IO megközelítésekkel foglalkozunk.

2. Használata java.nio.file.Files

Annak ellenőrzésére, hogy létezik-e fájl vagy könyvtár, kihasználhatjuk a Files.exists (elérési út) módszer. Amint az a metódus aláírásából kitűnik, először meg kell szereznünk egy Pálya a kívánt fájlba vagy könyvtárba. Akkor ezt átadhatjuk Pálya hoz Files.exists (elérési út) módszer:

Path path = Paths.get ("nem létezik.txt"); assertFalse (Fájlok.létezik (elérési út));

Mivel a fájl nem létezik, visszatér hamis. Érdemes megemlíteni azt is, hogy ha a Files.exists (elérési út) módszer találkozik egy IOException, visszatér hamis, is.

Másrészt, ha az adott fájl létezik, akkor visszatér igaz a várakozásoknak megfelelően:

Elérési út tempFile = Files.createTempFile ("baeldung", "exist-article"); assertTrue (Fájlok.létezik (tempFile));

Itt létrehozunk egy ideiglenes fájlt, majd felhívjuk a Files.exists (elérési út) módszer.

Ez még a könyvtáraknál is működik:

Path tempDirectory = Files.createTempDirectory ("baeldung-exist"); assertTrue (Fájlok.létezik (tempDirectory));

Ha kifejezetten szeretnénk tudni, hogy létezik-e fájl vagy könyvtár, akkor azt is használhatjuk Files.isDirectory (elérési út) vagy Files.isRegularFile (elérési út) mód:

assertTrue (Files.isDirectory (tempDirectory)); assertFalse (Files.isDirectory (tempFile)); assertTrue (Files.isRegularFile (tempFile));

Itt van még a notExists (Path) visszatérő módszer igaz ha az adott Pálya nem létezik:

assertFalse (Files.notExists (tempDirectory));

Néha a Files.exists (elérési út) visszatér hamis mert nem rendelkezünk a szükséges fájlengedélyekkel. Ilyen esetekben használhatjuk a Files.isReadable (elérési út) módszer annak biztosítására, hogy a fájl valóban olvasható legyen az aktuális felhasználó számára:

assertTrue (Files.isReadable (tempFile)); assertFalse (Files.isReadable (Paths.get ("/ root / .bashrc")));

2.1. Szimbolikus linkek

Alapértelmezés szerint a Files.exists (elérési út) módszer követi a szimbolikus linkeket. Ha fájl A szimbolikus linket tartalmaz a fájlhoz B, aztán a A fájlok léteznek (A) metódus visszatér igaz csak akkor, ha a fájl B már létezik:

Elérési út = Files.createTempFile ("baeldung", "target"); Elérési út szimbólum = Paths.get ("teszt-link-" + ThreadLocalRandom.current (). NextInt ()); Path symbolicLink = Files.createSymbolicLink (szimbólum, cél); assertTrue (Fájlok.létezik (symbolicLink));

Ha töröljük a link célpontját, akkor a Files.exists (elérési út) vissza fog térni hamis:

Files.deleteIfExists (cél); assertFalse (Fájlok.létezik (symbolicLink));

Mivel a linkcél már nem létezik, a link követése nem vezet semmihez, és Files.exists (elérési út) vissza fog térni hamis.

Még az is lehetséges, hogy nem követi a szimbolikus linkeket egy megfelelő átadásával LinkOption második érvként:

assertTrue (Files.exists (symbolicLink, LinkOption.NOFOLLOW_LINKS));

Mivel maga a kapcsolat létezik, a Files.exists (elérési út) metódus visszatér igaz. Azt is ellenőrizhetjük, hogy a Pálya szimbolikus link a Files.isSymbolicLink (elérési út) módszer:

assertTrue (Files.isSymbolicLink (symbolicLink)); assertFalse (Files.isSymbolicLink (cél));

3. Használata java.io.Fájl

Ha Java 7-et vagy a Java újabb verzióját használjuk, akkor nagyon ajánlott a modern Java NIO API-kat használni az ilyen típusú követelményekhez.

Annak érdekében, hogy megbizonyosodhassunk arról, hogy létezik-e fájl vagy könyvtár a Java régi IO világában, hívhatjuk a létezik() módszer be File példányok:

assertFalse (új fájl ("érvénytelen"). létezik ());

Ha a fájl vagy könyvtár már létezik, akkor visszatér igaz:

Elérési út tempFilePath = Files.createTempFile ("baeldung", "exist-io"); Path tempDirectoryPath = Files.createTempDirectory ("baeldung-exist-io"); File tempFile = új fájl (tempFilePath.toString ()); File tempDirectory = új fájl (tempDirectoryPath.toString ()); assertTrue (tempFile.exists ()); assertTrue (tempDirectory.exists ());

A fentiek szerint a létezik() A metódust nem érdekli, hogy fájl vagy könyvtár-e. Ezért, amíg létezik, visszatér igaz.

A isFile () metódus azonban visszatér igaz ha az adott elérési út egy létező fájl:

assertTrue (tempFile.isFile ()); assertFalse (tempDirectory.isFile ());

Hasonlóképpen a isDirectory () metódus visszatér igaz ha az adott elérési út egy létező könyvtár:

assertTrue (tempDirectory.isDirectory ()); assertFalse (tempFile.isDirectory ());

Végül a canRead () metódus visszatér igaz ha a fájl olvasható:

assertTrue (tempFile.canRead ()); assertFalse (új Fájl ("/ root / .bashrc"). canRead ());

Amikor visszatér hamis, vagy a fájl nem létezik, vagy a jelenlegi felhasználó nem rendelkezik a fájl olvasási engedélyével.

4. Következtetés

Ebben a rövid bemutatóban láttuk, hogyan lehet megbizonyosodni arról, hogy létezik-e fájl vagy könyvtár a Java-ban. Útközben beszélgettünk a modern NIO-ról és a régi IO API-ról. Azt is láttuk, hogy az NIO API hogyan kezeli a szimbolikus linkeket.

Szokás szerint az összes példa elérhető a GitHubon.