Skontrolujte, či súbor alebo adresár existuje v prostredí Java

1. Prehľad

V tomto rýchlom výučbe sa oboznámime s rôznymi spôsobmi, ako skontrolovať existenciu súboru alebo adresára.

Najprv začneme s modernými API NIO a potom sa budeme venovať starším prístupom k vstupom a výstupom.

2. Pomocou java.nio.file.files

Na kontrolu, či súbor alebo adresár existuje, môžeme využiť znak Files.exists (cesta) metóda. Ako je zrejmé z podpisu metódy, mali by sme najskôr získať a Cesta do zamýšľaného súboru alebo adresára. Potom to môžeme odovzdať Cesta do Files.exists (cesta) metóda:

Path path = Paths.get ("does-not-exist.txt"); assertFalse (Files.exists (cesta));

Pretože súbor neexistuje, vráti sa nepravdivé. Je tiež potrebné spomenúť, že ak Files.exists (cesta) metóda narazí na Výnimka IO, vráti sa to nepravdivé, tiež.

Na druhej strane, ak daný súbor existuje, vráti sa pravda podľa očakávania:

Path tempFile = Files.createTempFile ("baeldung", "exist-article"); assertTrue (Files.exists (tempFile));

Tu vytvárame dočasný súbor a potom voláme Files.exists (cesta) metóda.

Toto funguje dokonca aj pre adresáre:

Cesta tempDirectory = Files.createTempDirectory ("baeldung-existuje"); assertTrue (Files.exists (tempDirectory));

Ak konkrétne chceme vedieť, či súbor alebo adresár existuje, môžeme tiež použiť Files.isDirectory (cesta) alebo Files.isRegularFile (cesta) metódy:

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

K dispozícii je tiež notExists (cesta) metóda, ktorá sa vráti pravda ak je dané Cesta neexistuje:

assertFalse (Files.notExists (tempDirectory));

Niekedy Files.exists (cesta) vracia nepravdivé pretože nemáme požadované oprávnenie k súboru. V takýchto scenároch môžeme použiť Files.isReadable (cesta) spôsob, ako zabezpečiť, aby bol súbor aktuálny používateľ skutočne čitateľný:

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

2.1. Symbolické odkazy

V predvolenom nastavení je Files.exists (cesta) metóda sleduje symbolické odkazy. Ako spis A má symbolický odkaz na súbor B, potom Files.exists (A) metóda sa vracia pravda len a len v prípade, že súbor B už existuje:

Cesta target = Files.createTempFile ("baeldung", "target"); Symbol cesty = Paths.get ("test-link-" + ThreadLocalRandom.current (). NextInt ()); Cesta symbolicLink = Files.createSymbolicLink (symbol, cieľ); assertTrue (Files.exists (symbolicLink));

Ak teraz odstránime cieľ odkazu, Files.exists (cesta) vráti sa nepravdivé:

Files.deleteIfExists (cieľ); assertFalse (Files.exists (symbolicLink));

Pretože cieľ odkazu už neexistuje, nasledovanie odkazu nevedie k ničomu, a Files.exists (cesta) vráti sa nepravdivé.

Je dokonca možné nesledovať symbolické odkazy odovzdaním príslušného odkazu LinkOption ako druhý argument:

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

Pretože samotný odkaz existuje, Files.exists (cesta) metóda sa vracia pravda. Tiež môžeme skontrolovať, či a Cesta je symbolický odkaz pomocou Files.isSymbolicLink (cesta) metóda:

assertTrue (Files.isSymbolicLink (symbolicLink)); assertFalse (Files.isSymbolicLink (cieľ));

3. Používanie java.io.Súbor

Ak používame Java 7 alebo novšiu verziu Java, dôrazne sa odporúča používať moderné Java NIO API pre tieto druhy požiadaviek.

Aby sme sa však uistili, že súbor alebo adresár existuje v starom svete Java IO, môžeme zavolať existuje () metóda na Súbor prípady:

assertFalse (nový súbor ("neplatný"). existuje ());

Ak súbor alebo adresár už existuje, vráti sa pravda:

Path tempFilePath = Files.createTempFile ("baeldung", "exist-io"); Cesta tempDirectoryPath = Files.createTempDirectory ("baeldung-existuje-io"); File tempFile = new File (tempFilePath.toString ()); Súbor tempDirectory = nový súbor (tempDirectoryPath.toString ()); assertTrue (tempFile.exists ()); assertTrue (tempDirectory.exists ());

Ako je uvedené vyššie, the existuje () metóda nezaujíma, či ide o súbor alebo adresár. Preto, pokiaľ existuje, vráti sa pravda.

The isFile () metóda sa však vráti pravda ak je daná cesta existujúcim súborom:

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

Podobne isDirectory () metóda sa vracia pravda ak je daná cesta existujúcim adresárom:

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

Nakoniec canRead () metóda sa vracia pravda ak je súbor čitateľný:

assertTrue (tempFile.canRead ()); assertFalse (nový súbor ("/ root / .bashrc"). canRead ());

Keď sa vráti nepravdivé, súbor buď neexistuje, alebo aktuálny používateľ nemá povolenie na čítanie súboru.

4. Záver

V tomto krátkom návode sme videli, ako zabezpečiť, aby súbor alebo adresár existoval v prostredí Java. Počas toho sme hovorili o moderných NIO a starších IO API. Tiež sme videli, ako NIO API narába so symbolickými odkazmi.

Ako obvykle sú všetky príklady dostupné na GitHub.


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