Files.list în Java

Returnează conținutul direct al unui folder (fișiere și subfoldere, fără să intre în ele), ca Stream<Path>.

Sintaxă
static Stream<Path> list(Path folder) throws IOException

Ce face Files.list

Files.list(folder) dă elementele aflate direct în folder, câte un Path pentru fiecare. Nu intră în subfoldere; pentru asta folosește Files.walk.

Ordinea elementelor nu este garantată (depinde de sistemul de fișiere), deci sortează-le dacă le afișezi. Stream-ul ține folderul deschis: folosește-l în try-with-resources.

Parametri

Parametru Descriere
folder Folderul listat. Dacă nu e folder, se aruncă NotDirectoryException.

Ce returnează

Un Stream<Path> cu elementele din folder (trebuie închis).

Exemple

Exemplul 1: Fișierele unui folder, sortate

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 poze = Files.createDirectory(Path.of("poze"));
        for (String nume : new String[]{"sibiu.jpg", "brasov.png", "iasi.jpg"}) {
            Files.writeString(poze.resolve(nume), "...");
        }
        Files.createDirectory(poze.resolve("2025"));

        try (Stream<Path> elemente = Files.list(poze)) {
            elemente.map(Path::getFileName).sorted().forEach(System.out::println);
        }
    }
}

Rezultat

2025
brasov.png
iasi.jpg
sibiu.jpg

Exemplul 2: Doar pozele .jpg și mărimea totală

Filtrăm după extensie și adunăm mărimile. Files.size aruncă IOException, deci în lambda îl învelim în UncheckedIOException.

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

public class Main {
    static long marime(Path p) {
        try {
            return Files.size(p);
        } catch (IOException e) {
            throw new UncheckedIOException(e);
        }
    }

    public static void main(String[] args) throws IOException {
        Path poze = Files.createDirectory(Path.of("poze"));
        Files.writeString(poze.resolve("mare.jpg"), "a".repeat(500));
        Files.writeString(poze.resolve("munte.jpg"), "b".repeat(300));
        Files.writeString(poze.resolve("lista.txt"), "c".repeat(50));

        try (Stream<Path> elemente = Files.list(poze)) {
            List<Path> jpg = elemente.filter(p -> p.toString().endsWith(".jpg")).sorted().toList();
            System.out.println("Poze: " + jpg.size());
            System.out.println("Total: " + jpg.stream().mapToLong(Main::marime).sum() + " octeți");
        }
    }
}

Rezultat

Poze: 2
Total: 800 octeți

Greșeli frecvente

  • Afișezi rezultatul fără sortare și te bazezi pe ordine. Pe alt calculator ordinea poate fi alta.
  • Te aștepți să vezi și fișierele din subfoldere. list merge un singur nivel; folosește walk.

Comenzi înrudite

  • 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.isDirectory: isDirectory spune dacă la cale este un folder, iar isRegularFile dacă este un fișier obișnuit.
  • File.listFiles: Returnează un tablou cu fișierele și folderele dintr-un folder, sau null dacă nu este folder ori nu poate fi citit.
  • Path.getFileName: getFileName dă ultimul nume din cale (fișierul), iar getParent calea fără ultimul nume (folderul care îl conține).