Files.isDirectory în Java

isDirectory spune dacă la cale este un folder, iar isRegularFile dacă este un fișier obișnuit.

Sintaxă
static boolean isDirectory(Path cale, LinkOption... optiuni)
static boolean isRegularFile(Path cale, LinkOption... optiuni)

Ce face Files.isDirectory

Files.isDirectory(cale) returnează true doar dacă există un folder la calea dată. Files.isRegularFile(cale) returnează true doar pentru un fișier obișnuit (nu folder, nu dispozitiv special).

Pentru o cale care nu există, ambele dau false, fără excepție. Sunt utile când parcurgi un folder cu Files.list sau Files.walk și vrei să tratezi diferit fișierele și subfolderele.

Parametri

Parametru Descriere
cale Calea verificată.
optiuni Opțional: LinkOption.NOFOLLOW_LINKS.

Ce returnează

true sau false.

Exemple

Exemplul 1: Folder, fișier sau nimic

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

public class Main {
    static void descrie(Path p) {
        if (Files.isDirectory(p)) {
            System.out.println(p + " este folder");
        } else if (Files.isRegularFile(p)) {
            System.out.println(p + " este fișier");
        } else {
            System.out.println(p + " nu există");
        }
    }

    public static void main(String[] args) throws IOException {
        Files.createDirectory(Path.of("documente"));
        Files.writeString(Path.of("documente", "cv.txt"), "Ana Popescu, Iași");

        descrie(Path.of("documente"));
        descrie(Path.of("documente", "cv.txt"));
        descrie(Path.of("documente", "poza.jpg"));
    }
}

Rezultat

documente este folder
documente/cv.txt este fișier
documente/poza.jpg nu există

Exemplul 2: Doar fișierele dintr-un folder

Files.list dă și fișiere, și foldere; păstrăm doar fișierele și sortăm numele pentru o afișare stabilă.

import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.stream.Stream;

public class Main {
    public static void main(String[] args) throws IOException {
        Path proiect = Files.createDirectory(Path.of("proiect"));
        Files.createDirectory(proiect.resolve("src"));
        Files.writeString(proiect.resolve("README.md"), "# Proiect");
        Files.writeString(proiect.resolve("note.txt"), "de făcut");

        try (Stream<Path> continut = Files.list(proiect)) {
            continut.filter(Files::isRegularFile)
                    .map(p -> p.getFileName().toString())
                    .sorted()
                    .forEach(System.out::println);
        }
    }
}

Rezultat

README.md
note.txt

Greșeli frecvente

  • Folosești !isDirectory ca să deduci că e fișier. Poate să nu existe deloc; verifică isRegularFile.

Comenzi înrudite

  • Files.exists: Verifică dacă un fișier sau un folder există la calea dată; nu aruncă excepții.
  • Files.list: Returnează conținutul direct al unui folder (fișiere și subfoldere, fără să intre în ele), ca Stream<Path>.
  • Files.walk: Parcurge un folder cu tot ce conține, la orice adâncime, și dă toate căile ca Stream<Path>, începând cu folderul însuși.
  • Files.createDirectory: createDirectory creează un singur folder; createDirectories creează și folderele părinte lipsă, fără eroare dacă există.