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.
listmerge un singur nivel; foloseștewalk.
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).