Files.exists în Java

Verifică dacă un fișier sau un folder există la calea dată; nu aruncă excepții.

Sintaxă
static boolean exists(Path cale, LinkOption... optiuni)
static boolean notExists(Path cale, LinkOption... optiuni)

Ce face Files.exists

Files.exists(cale) returnează true dacă la calea dată există ceva (fișier sau folder). Nu aruncă IOException, deci se poate folosi direct într-un if.

Files.notExists(cale) nu este mereu opusul: dacă Java nu poate afla (de exemplu, lipsesc drepturile), ambele dau false. Pentru a afla dacă e fișier sau folder, folosește isRegularFile și isDirectory.

Între verificare și folosire, alt program poate șterge sau crea fișierul. Pentru operații importante este mai sigur să încerci direct operația și să prinzi excepția (NoSuchFileException, FileAlreadyExistsException).

Parametri

Parametru Descriere
cale Calea verificată.
optiuni Opțional: LinkOption.NOFOLLOW_LINKS, ca să nu se urmeze legăturile simbolice.

Ce returnează

true dacă fișierul sau folderul există.

Exemple

Exemplul 1: Verificare înainte de citire

import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;

public class Main {
    public static void main(String[] args) throws IOException {
        Path setari = Path.of("setari.txt");
        System.out.println("Există la început: " + Files.exists(setari));

        if (!Files.exists(setari)) {
            Files.writeString(setari, "tema=întunecată\n");
            System.out.println("Am creat fișierul cu valorile implicite.");
        }
        System.out.print(Files.readString(setari));
        System.out.println("Există acum: " + Files.exists(setari));
    }
}

Rezultat

Există la început: false
Am creat fișierul cu valorile implicite.
tema=întunecată
Există acum: true

Exemplul 2: exists funcționează și pentru foldere

Directorul curent (.) există mereu; un folder inventat nu.

import java.nio.file.Files;
import java.nio.file.Path;

public class Main {
    public static void main(String[] args) {
        System.out.println(". există: " + Files.exists(Path.of(".")));
        System.out.println("poze/vacanta există: " + Files.exists(Path.of("poze", "vacanta")));
        System.out.println("poze/vacanta notExists: " + Files.notExists(Path.of("poze", "vacanta")));
    }
}

Rezultat

. există: true
poze/vacanta există: false
poze/vacanta notExists: true

Greșeli frecvente

  • Verifici cu exists și apoi creezi fișierul, crezând că e sigur. Între cele două, alt proces îl poate crea; folosește CREATE_NEW și prinde excepția.
  • Crezi că !exists înseamnă sigur că fișierul lipsește. Poate fi și o problemă de drepturi; notExists face diferența.

Comenzi înrudite

  • Files.isDirectory: isDirectory spune dacă la cale este un folder, iar isRegularFile dacă este un fișier obișnuit.
  • Files.delete: Șterge un fișier sau un folder gol; delete aruncă excepție dacă lipsește, deleteIfExists doar returnează false.
  • File: Clasa veche pentru căi de fișiere: exists verifică existența, getName dă numele, length mărimea în octeți.
  • Files: Clasa cu metode statice pentru lucrul cu fișiere și foldere: citire, scriere, copiere, mutare, ștergere, listare.