File.listFiles în Java

Returnează un tablou cu fișierele și folderele dintr-un folder, sau null dacă nu este folder ori nu poate fi citit.

Sintaxă
File[] listFiles()
File[] listFiles(FileFilter filtru)
String[] list()

Ce face File.listFiles

folder.listFiles() dă un File[] cu elementele aflate direct în folder (fără subfoldere în adâncime). Varianta cu filtru păstrează doar elementele dorite: listFiles(File::isFile) sau listFiles(f -> f.getName().endsWith(".txt")). list() dă doar numele, ca String[].

Dacă obiectul nu este un folder sau apare o eroare de citire, metoda returnează null, nu un tablou gol. Ordinea elementelor nu este garantată, deci sortează-le înainte de afișare.

Parametri

Parametru Descriere
filtru Opțional: condiția pe care trebuie s-o îndeplinească fiecare element.

Ce returnează

Un File[] sau null.

Exemple

Exemplul 1: Conținutul unui folder, sortat

import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.util.Arrays;

public class Main {
    public static void main(String[] args) throws IOException {
        File muzica = new File("muzica");
        muzica.mkdir();
        for (String nume : new String[]{"hora.mp3", "doina.mp3", "coperta.jpg"}) {
            Files.writeString(new File(muzica, nume).toPath(), "...");
        }
        new File(muzica, "albume").mkdir();

        File[] toate = muzica.listFiles();
        Arrays.sort(toate);
        for (File f : toate) {
            System.out.println((f.isDirectory() ? "[D] " : "    ") + f.getName());
        }

        File[] mp3 = muzica.listFiles(f -> f.getName().endsWith(".mp3"));
        System.out.println("Melodii: " + mp3.length);
    }
}

Rezultat

[D] albume
    coperta.jpg
    doina.mp3
    hora.mp3
Melodii: 2

Exemplul 2: null pentru ceva care nu e folder

Pentru un fișier sau o cale inexistentă, listFiles dă null; verificăm înainte de a-l parcurge.

import java.io.File;

public class Main {
    static void listeaza(File f) {
        File[] continut = f.listFiles();
        if (continut == null) {
            System.out.println(f + ": nu este un folder care poate fi citit");
            return;
        }
        System.out.println(f + ": " + continut.length + " elemente");
    }

    public static void main(String[] args) {
        new File("gol").mkdir();
        listeaza(new File("gol"));
        listeaza(new File("nu-exista"));
    }
}

Rezultat

gol: 0 elemente
nu-exista: nu este un folder care poate fi citit

Greșeli frecvente

  • Parcurgi direct rezultatul: for (File f : folder.listFiles()) dă NullPointerException dacă folderul lipsește.
  • Afișezi fără sortare și te bazezi pe ordine. Folosește Arrays.sort.

Comenzi înrudite

  • File: Clasa veche pentru căi de fișiere: exists verifică existența, getName dă numele, length mărimea în octeți.
  • 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.
  • File.mkdir: mkdir creează un folder, mkdirs și folderele părinte, delete șterge un fișier sau un folder gol; toate returnează true/false.