N'ayant trouvé nulle part une description explicative en russe, quel
genre de bête
Files.walkFileTree () , et l'ayant maîtrisé avec un grincement, comme il s'est avéré plus tard, une fonctionnalité simple, j'ai décidé de partager le matériel avec des exemples dans le cadre de l'épinglage, ce qui m'a vraiment manqué.
La méthode walkFileTree () vous permet de contourner l'arborescence des fichiers et sous-répertoires qui lui sont passés en tant que paramètre de l'élément Path ...
Deux signatures de méthodeFiles.walkFileTree(Path start, FileVisitor<? super Path> visitor); Files.walkFileTree(Path start, Set<FileVisitOption> options, int maxDepth, FileVisitor<? super Path> visitor);
O Where
Chemin de départ - le répertoire dont le contenu doit être contourné,
Visiteur FileVisitor - une instance d'une classe implémentant l'interface FileVisitor, ou héritant de SimpleFileVisitor (). Ce dernier, à mon avis, est plus pratique à utiliser lorsque vous n'avez pas besoin de redéfinir toutes les méthodes FileVisitor (), qui seront discutées un peu plus tard (mais cela dépend de la situation),
Définir les options <\ FileVisitOption> - un ensemble d'options qui déterminent le comportement lors de l'exploration,
maxDepth - profondeur de passage des sous-répertoires.
Tout d'abord, sur les paramètres qui vous seront utiles tôt ou tard.maxDepth - profondeur de traversée. A = 0, l'entrée dans le répertoire ne sera pas effectuée, à = MAX_VALUE le répertoire sera examiné à la profondeur maximale, respectivement, avec maxDepth = 3, le passage s'effectuera dans 3 sous-répertoires "down".
FileVisitOption - enum est un ensemble qui détermine si le programme doit suivre les liens symboliques lors de l'analyse (dans ce cas, la valeur FileVisitOption.FOLLOW_LINKS est spécifiée).
FileVisitor - une interface qui a 4 méthodes:
1) FileVisitResult preVisitDirectory (T dir, BasicFileAttributes attrs) lève IOException;inclut un ensemble de méthodes à suivre avant de visiter le sous-répertoire courant. Par exemple, grâce à attrs, vous pouvez obtenir des données telles que:
lastModifiedTime (),
lastAccessTime (),
creationTime (),
isRegularFile () - true si nous avons un fichier devant nous,
isDirectory () - vrai si nous avons un répertoire
isSymbolicLink () - true si l'objet est un lien,
isOther () - true si l'objet en question n'est ni un fichier, ni un répertoire, ni un lien,
size () - renvoie la taille de l'objet et
fileKey () - renvoie une clé de fichier ou null;
Si vous prévoyez de compter le nombre de répertoires lors de l'analyse, n'oubliez pas que le répertoire de démarrage sera également pris en compte dans le montant total.
2) FileVisitResult visitFile (fichier T, attr BasicFileAttributes) lève IOException;un ensemble de méthodes à suivre lors de la visite du fichier en cours (par exemple, vous pouvez parcourir son contenu et rechercher les occurrences de la chaîne de recherche, ou encore rechercher la date de la dernière visite, modifier le fichier ou ajouter la taille de tous les fichiers à analyser pour obtenir la taille du répertoire)
Exemple public class MyFileVisitor extends SimpleFileVisitor<Path> { String partOfName; String partOfContent; @Override public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException { boolean containsName = true; if(partOfName!=null && !file.getFileName().toString().contains(partOfName)) containsName = false; String content = new String(Files.readAllBytes(file)); boolean containsContent = true; if(partOfContent!=null && !content.contains(partOfContent)) containsContent = false; if(containsName && containsContent) foundFiles.add(file); return FileVisitResult.CONTINUE; }
Dans cet exemple, lors de la traversée de l'arborescence de fichiers, chaque fichier est vérifié pour l'exécution simultanée de 2 événements - si le nom de fichier contient l'entrée souhaitée et si le fichier contient des entrées de la chaîne requise. Lorsque les deux conditions sont remplies, le fichier est ajouté à la feuille résultante, après quoi l'analyse continue;
Ou un autre
exemple de la surcharge de la méthode visitFile
@Override public FileVisitResult visitFile(Path path, BasicFileAttributes attrs) throws IOException { if(path.toString().endsWith(".rar") || path.toString().endsWith(".zip")) archived.add(path.toString()); return FileVisitResult.CONTINUE; }
Le programme lors d'une traversée d'arbre lors de la visite d'un fichier, dans le cas où il s'agit d'une archive zip ou rar, ajoute son adresse (chemin) sous forme de chaîne à la liste des fichiers d'archive;
3) FileVisitResult visitFileFailed (fichier T, IOException exc) lève IOException;Cette méthode peut s'avérer utile lorsque l'accès à un fichier échoue + il "est capable" de lever une exception. Le reste peut être appris via l'annotation Override. Par exemple, calculez le nombre de fichiers inaccessibles;
Exemple @Override public FileVisitResult visitFileFailed(Path path, IOException exc) throws IOException { failed.add(path.toString()); return FileVisitResult.SKIP_SUBTREE; }
Dans le cas d'une tentative infructueuse d'accès au chemin, ce chemin est ajouté en tant que chaîne à la liste des échecs similaires, et le programme continue de contourner sans visiter son sous-répertoire;
4) FileVisitResult postVisitDirectory (T dir, IOException exc) lève IOException;tout ce qui doit être fait après avoir visité le répertoire doit être répertorié dans le cadre de la surcharge de cette méthode. Par exemple, en parcourant un répertoire et en détruisant tous les fichiers qu'il contient, cette méthode peut également le détruire lui-même (nous nous souvenons que Files.delete (Path dir) ne supprime le répertoire que s'il est vide et ne contient pas de fichiers).
Exemple @Override public FileVisitResult postVisitDirectory(Path path, IOException exc) throws IOException { Files.delete(path); return FileVisitResult.CONTINUE; }
Toutes les méthodes décrites ci-dessus sont complétées en renvoyant les «résultats de la visite» (FileVisitResult) de l'objet qui appartiennent à l'ensemble d'énumérations et peuvent prendre les valeurs suivantes:
CONTINUE
- continue de parcourir l'arbre;TERMINATE
- termine la traversée de l'arbre;SKIP_SUBTREE
- continue de contourner, sans aller dans ce répertoire;SKIP_SIBLINGS
- exclut de l'exploration des "parents" de ce fichier ou répertoire;