Comment compter le nombre de fichiers dans un répertoire en utilisant Java ? Pour simplifier, supposons que le répertoire n'a pas de sous-répertoires.
Je connais la méthode standard de :
new File(<directory path>).listFiles().length
Mais cela va effectivement passer par tous les fichiers du répertoire, ce qui peut prendre du temps si le nombre de fichiers est important. De plus, je ne me soucie pas des fichiers actuels du répertoire, sauf si leur nombre est supérieur à un nombre fixe élevé (disons 5000).
Je devine, mais le répertoire (ou son i-node dans le cas d'Unix) ne stocke-t-il pas le nombre de fichiers qu'il contient ? Si je pouvais obtenir ce nombre directement à partir du système de fichiers, ce serait beaucoup plus rapide. Je dois effectuer cette vérification pour chaque requête HTTP sur un serveur Tomcat avant que le back-end ne commence à effectuer le véritable traitement. La vitesse est donc d'une importance capitale.
Je pourrais lancer un démon de temps en temps pour vider le répertoire. Je le sais, alors ne me donnez pas cette solution.
0 votes
Si le répertoire contient potentiellement un grand nombre de fichiers (plus de 1000), vous pouvez éviter d'allouer le tableau retourné par les méthodes de liste de fichiers. Je n'ai pas encore essayé, mais vous pourriez peut-être utiliser listFiles et lui passer une instance de FileFilter qui fait le comptage des fichiers dans la méthode accept, tout en retournant false pour tous les fichiers. Je suppose que cela évite l'allocation d'un tableau, tout en vous donnant un compte de fichiers.
0 votes
Ignorez mon dernier commentaire... Selon l'implémentation du JDK, le tableau peut être alloué de toute façon (sous le capot). Cela semble être le cas dans openjdk en tout cas.
0 votes
Pour Java 7 et les versions ultérieures, ce problème a une bonne solution avec une API Java standard. Voir la réponse de @mateuscb ci-dessous - stackoverflow.com/questions/687444/ .