Méthode list() de Java java.nio.file.Files
java.nio.file.Files.list()est une méthode utilitaire fournie dans le package Java NIO (New I/O) pour lister le contenu d'un répertoire. Cette méthode renvoie unStream<Path>objet, contenant toutes les entrées (fichiers et sous-répertoires) dans le répertoire spécifié.
Définition de méthode
Paramètres de méthode
paramètre dir
- Type:
java.nio.file.Path - Description: Le chemin du répertoire dont le contenu doit être listé
- Notes:
- Si le paramètre n'est pas un répertoire, il lèvera
NotDirectoryException - Le chemin doit exister, sinon une exception sera levée
NoSuchFileException - Si le programme n'a pas l'autorisation de lecture pour le répertoire, une exception sera levée
AccessDeniedException
- Si le paramètre n'est pas un répertoire, il lèvera
Valeur de retour
Flux
- Description: Un flux contenant toutes les entrées (fichiers et sous-répertoires) dans le répertoire
- Fonctionnalités:
- Les éléments dans le flux sont
Pathobjets. - Le flux est ordonné selon l'ordre naturel des entrées du répertoire (généralement triées par nom)
- Le flux est chargé paresseusement ; il ne lit réellement le contenu du répertoire que lorsqu'il est parcouru
- Le flux doit être correctement fermé pour libérer les ressources système
- Les éléments dans le flux sont
Caractéristiques de la méthode
1. Non récursif
list()La méthode ne liste que les entrées directement dans le répertoire spécifié ; elle ne liste pas récursivement le contenu des sous-répertoires.
2. Exclure les entrées spéciales
Le flux renvoyé ne contient pas les entrées pour le répertoire lui-même (".") et le répertoire parent ("..").
3. Gestion des ressources
Étant donné qu'un Stream est renvoyé, il est recommandé d'utiliser une instruction try-with-resources pour garantir que le flux est correctement fermé :
Exemple
stream.forEach(System.out::println);
}
Exemples d'utilisation
Utilisation de base : lister le contenu d'un répertoire
Exemple
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.stream.Stream;
public class ListDirectoryExample {
public static void main(String[] args) {
Path dir = Paths.get("C:/example");
try (Stream<Path> stream = Files.list(dir)) {
stream.forEach(System.out::println);
} catch (IOException e) {
e.printStackTrace();
}
}
}
Utilisation avancée : filtrage de fichiers spécifiques
Exemple
stream.filter(path -> path.toString().endsWith(".java"))
.forEach(System.out::println);
} catch (IOException e) {
e.printStackTrace();
}
Conversion vers d'autres collections
Exemple
List<Path> imageFiles = stream.collect(Collectors.toList());
// Traiter la liste des fichiers collectés
} catch (IOException e) {
e.printStackTrace();
}
Gestion des exceptions
Files.list()La méthode peut lever les exceptions suivantes :
- NotDirectoryException- Lorsque le chemin n'est pas un répertoire
- NoSuchFileException- Lorsque le répertoire n'existe pas
- SecurityException- Lorsqu'il n'y a pas de permission pour lire le répertoire
- IOException- Lorsque d'autres erreurs d'E/S se produisent
Considérations de performance
- Chargement paresseux: Le flux est chargé paresseusement ; le répertoire n'est réellement lu que lorsqu'une opération terminale (telle que forEach) est exécutée
- Consommation de ressources: Pour les répertoires contenant un grand nombre de fichiers, l'utilisation d'un flux peut éviter de charger toutes les entrées en mémoire en une seule fois
- Traitement parallèle: Vous pouvez appeler la
parallel()méthode pour mettre en œuvre le traitement parallèle, mais faites attention aux problèmes de sécurité des threads
Comparaison avec des méthodes similaires
| Méthode | Type de retour | Récursivité | Contient des entrées spéciales | Remarques |
|---|---|---|---|---|
Files.list() |
Stream<Path> |
non | non | Recommandé, économe en ressources |
File.listFiles() |
File[] |
non | non | Méthode d'E/S traditionnelle |
Files.walk() |
Stream<Path> |
Oui | Oui | Liste récursivement tout le contenu |
Files.newDirectoryStream() |
DirectoryStream<Path> |
non | non | Doit être fermé manuellement |
Bonnes pratiques
- Utilisez toujours try-with-resources: Assurez-vous que le flux est correctement fermé
- Gérez les exceptions: Gérez correctement les IOException possibles
- Envisagez d'utiliser des filtres: Filtrez les entrées indésirables le plus tôt possible dans les opérations de flux
- Évitez de modifier le répertoire: Ne modifiez pas son contenu pendant le parcours du répertoire
- Faites attention aux liens symboliques: Par défaut, les liens symboliques sont suivis, ce qui peut provoquer des références circulaires
Résumé
Files.list()Cette méthode est une façon moderne de gérer le contenu d'un répertoire en Java NIO, offrant tous les avantages de l'API Stream, notamment l'exécution paresseuse, les opérations chaînées et les capacités de traitement parallèle. Pour de simples besoins de listage de répertoire, elle est plus flexible et efficace que lesFile.listFiles()méthodes traditionnelles.
Java java.nio.file.Files