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.