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
- 10 autres exercices corrigés dans ce chapitre
- Les 2 QCM du chapitre, le premier sans compte
- Le tuteur, qui guide pas à pas sans donner la réponse
Sans compte : le cours et le premier QCM. Exercices et tuteur : inscription gratuite en 30 secondes, sans carte bancaire.