Adloun

programmation Java (école d'ingénieur) · Chapitre 14 · Exercice de TD

Taille d'une arborescence

Fichiers et flux · niveau 3 (difficile)

Énoncé

Écrire un programme qui parcourt toute l'arborescence d'un dossier donné en argument (avec Files.walk), et affiche le nombre de fichiers ordinaires, leur taille totale en octets et le nombre de fichiers dont le nom se termine par .java.

Corrigé


Path racine = Path.of(args.length > 0 ? args[0] : "projet");
long total = 0, nbJava = 0, nbFichiers = 0;
try (Stream<Path> tous = Files.walk(racine)) {          // parcours récursif
    for (Path p : (Iterable<Path>) tous::iterator) {
        if (!Files.isRegularFile(p)) continue;
        nbFichiers++;
        total += Files.size(p);
        if (p.getFileName().toString().endsWith(".java")) nbJava++;
    }
}
System.out.println(nbFichiers + " fichiers, " + total + " octets, dont " + nbJava + " fichiers .java");

Sur un petit dossier projet contenant src/A.java, src/modele/Point.java, doc/LISEZMOI.md et notes.txt :


4 fichiers, 66 octets, dont 2 fichiers .java

La conversion (Iterable<Path>) tous::iterator permet de parcourir le flux avec une boucle for ordinaire, où l'IOException de Files.size peut remonter normalement (ce qu'une lambda de forEach n'autorise pas). Files.walk renvoie aussi les dossiers, d'où le test isRegularFile.

100 % gratuit

La suite du chapitre est sur Adloun

Exercice suivant et tuteur

Sans compte : le cours et le premier QCM. Exercices et tuteur : inscription gratuite en 30 secondes, sans carte bancaire.

Le cours du chapitre · Tous les exercices du chapitre

Exercice suivant et tuteur →