itération via une arborescence de répertoire dans java
L'une des tâches communes lorsque vous travaillez avec les répertoires est d'itérer à travers tous les fichiers et répertoires à l'intérieur de un répertoire spécifié. Cela comprend les sous-répertoires, offrant un accès complet à l'ensemble de l'arbre d'annuaire. Dans Java, il existe des approches standard pour réaliser cette fonctionnalité.
fichier # isDirectory ():
La classe de fichiers dans Java a une méthode appelée isDirectory () qui peut être utilisé pour déterminer si un fichier représente un répertoire ou un fichier. Si le fichier donné est un répertoire, il contient une liste de fichiers et de répertoires, qui peuvent être obtenus à l'aide de la méthode ListFiles ().
approche récursive avec les fichiers # listfiles ():
Une approche simple de l'itération d'un arbre de répertoire consiste à utiliser la récursivité. L'extrait suivant démontre cette méthode:
import java.io.File; public class DirectoryIterator { public static void main(String[] args) { File directory = new File("/path/to/dir"); showFiles(directory.listFiles()); } public static void showFiles(File[] files) { for (File file : files) { if (file.isDirectory()) { System.out.println("Directory: " file.getAbsolutePath()); showFiles(file.listFiles()); // Recursive call } else { System.out.println("File: " file.getAbsolutePath()); } } } }
Cette approche fonctionne en appelant récursivement ShowFiles () sur la liste des fichiers renvoyés par listFiles (). Cependant, il est important de gérer l'exception Stackoverflowerror, qui peut se produire si l'arborescence du répertoire est trop profonde pour que la pile JVM puisse gérer. ]
Pour Java 8 et plus tard, une approche plus efficace consiste à utiliser des fichiers # walk (). Cette méthode implémente Tail Recursion, qui évite le problème StackoverflowerRor en maintenant l'état de l'itération dans la pile d'appels de méthode plutôt que la pile JVM.Importer java.nio.file.files; import java.nio.file.path; import java.nio.file.paths; Classe publique DirectoryItorator withjava8 { public static void main (String [] args) lève une exception { Path Directory = paths.get ("/ path / to / dir"); Files.walk (répertoire) .ForEach (path -> showfile (path.tofile ())); } public static void showfile (fichier de fichier) { if (file.isdirectory ()) { System.out.println ("Directory:" file.getAbsolutepath ()); } autre { System.out.println ("File:" file.getAbsolutepath ()); } } }
Les fichiers # walk () génère un flux d'objets pathing représentant les fichiers et répertoires dans l'arborescence du répertoire donné. La méthode foreach () est ensuite utilisée pour traiter chaque objet path et afficher le fichier ou le répertoire correspondant.Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.
Copyright© 2022 湘ICP备2022001581号-3