Maison >Java >javaDidacticiel >Comment les fichiers `Files.walk()` et `Files.find()` de Java 8 peuvent-ils rationaliser la liste des fichiers récursifs ?

Comment les fichiers `Files.walk()` et `Files.find()` de Java 8 peuvent-ils rationaliser la liste des fichiers récursifs ?

Susan Sarandon
Susan Sarandonoriginal
2024-12-19 09:02:11113parcourir

How Can Java 8's `Files.walk()` and `Files.find()` Streamline Recursive File Listing?

Liste de fichiers récursifs en Java : rationalisé grâce aux améliorations du framework

Contexte :

Itération sur tous les fichiers d’une structure de répertoires sont un besoin courant dans la programmation Java. Cependant, de nombreuses implémentations ont tendance à être complexes et manquent de prise en charge du framework.

Solution Framework (Java 8) : Files.walk() et Files.find()

Java 8 a introduit des mécanismes élégants pour l'itération des fichiers :

  • Files.walk() : Parcourt un répertoire de manière récursive, fournissant un flux d'objets Path représentant des fichiers individuels.
  • Files.find() : accepte un filtre BiPredicate, permettant un parcours plus efficace basé sur les attributs de fichier.

Exemple de code :

En utilisant Files.walk(), vous pouvez répertorier de manière récursive tous les fichiers normaux dans un répertoire spécifié comme suit :

try (Stream<Path> stream = Files.walk(Paths.get(path))) {
    stream.filter(Files::isRegularFile)
          .forEach(System.out::println);
}

Filtrage conditionnel (facultatif) :

Si un filtrage des attributs de fichier est requis, Files.find( ) offre une efficacité accrue :

Files.find(Paths.get(path),
           Integer.MAX_VALUE,
           (filePath, fileAttr) -> fileAttr.isRegularFile())
        .forEach(System.out::println);

Performance Considérations :

Files.walk() et Files.find() fonctionnent généralement de manière identique dans la pratique. Cependant, Files.find() peut être légèrement plus efficace lors du filtrage basé sur les attributs.

Notes supplémentaires :

  • Files.walk() fournit un flux- flexibilité basée sur un traitement ultérieur, tel que la limitation, le regroupement ou le mappage.
  • Files.find() offre une interface de filtre dédiée, qui peut simplifier les attributs complexes chèques.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn