[JAVA] Je souhaite rechercher de manière récursive des fichiers dans un répertoire spécifique

J'ai récemment dû rechercher récursivement des fichiers dans un répertoire. Je pense que l'API standard de Java a une telle fonction, mais ce n'est pas surprenant.

__2016-12-29 Addendum ___: Bien qu'il soit écrit que ce n'est pas dans la norme, il a été souligné qu'il y a en fait diverses choses. Voir la section des commentaires pour plus de détails.

Par exemple, supposons que vous ayez un répertoire avec la structure suivante:

D:\>tree D:\temp /f
Liste des chemins de dossier:Données de volume
Le numéro de série du volume est C4C7-10BC
D:\TEMP
│ Texte 0.txt
│
├─ Dossier 1
│ │ Texte 1.txt
│  │
│ └─ Dossier 1-1
│ Texte 1-1.txt
│
├─ Dossier 2
│ Texte 1.txt
│
└─ Dossier 3
Texte 3.txt

Pour rechercher de manière récursive des fichiers sous ce D: \ temp:

package folder;

import java.io.File;
import java.util.ArrayList;
import java.util.List;
import java.util.Stack;

public class FolderUtils {

	public static void main(String[] args) {
		
		String absolutePath = "D:\\temp";
		List<File> files = FolderUtils.findAllFile(absolutePath);
		for (File file : files) System.out.println(file.getAbsolutePath());
			// D:\temp\Dossier 2\Texte 1.txt
			// D:\temp\Dossier 1\Dossier 1-1\Texte 1-1.txt
			// D:\temp\Dossier 1\Texte 1.txt
			// D:\temp\Dossier 3\Texte 3.txt
			// D:\temp\Texte 0.txt

	}


	/**
	 *Recherche récursivement des fichiers dans un répertoire donné.
	 * @param absolutePath Chemin absolu du répertoire.
	 * @Liste des fichiers de retour
	 */
	public static List<File> findAllFile(String absolutePath) {

		List<File> files = new ArrayList<>();

		Stack<File> stack = new Stack<>();
		stack.add(new File(absolutePath));
		while (!stack.isEmpty()) {
			File item = stack.pop();
			if (item.isFile()) files.add(item);

			if (item.isDirectory()) {
				for (File child : item.listFiles()) stack.push(child);
			}
		}

		return files;
	}
}

L'algorithme est une recherche de priorité en profondeur. S'il s'agit d'un répertoire, c'est aussi simple que de chercher en dessous, sinon il est répertorié. J'ai choisi d'implémenter en utilisant des piles au lieu d'appels récursifs compatibles avec la recherche à priorité en profondeur - non pas parce que je voulais mettre en œuvre efficacement - mais parce que je voulais juste savoir que Java avait des piles (je voulais l'utiliser). ´ ・ ω ・ ) Je suis désolé, je n'ai pas de grande raison (´ ・ ω ・)

Recommended Posts

Je souhaite rechercher de manière récursive des fichiers dans un répertoire spécifique
Je souhaite rechercher de manière récursive la liste des classes sous le package
Je souhaite surveiller un fichier spécifique avec WatchService
Je souhaite créer une annotation générique pour un type
Je souhaite créer un modèle spécifique d'ActiveRecord ReadOnly
Je souhaite développer une application web!
Je veux écrire un joli build.gradle
Je veux écrire un test unitaire!
Lorsque vous souhaitez que Rails désactive une session pour un contrôleur spécifique
J'ai créé un outil Diff pour les fichiers Java
[Java] Traite tous les fichiers dans un certain répertoire
[Ruby] Je veux faire un saut de méthode!
Je veux écrire une simple répétition d'une chaîne de caractères
Je souhaite concevoir une structure pour la gestion des exceptions
Je souhaite supprimer un fichier géré par Git
[Android] Je souhaite créer un ViewPager pouvant être utilisé pour les didacticiels
Je veux obtenir récursivement la superclasse et l'interface d'une certaine classe
Je veux appeler une méthode d'une autre classe
J'ai fait une méthode pour demander la prime vendredi
Je veux utiliser une petite icône dans Rails
Je souhaite appliquer ContainerRelativeShape uniquement à des coins spécifiques [SwiftUI]
Je souhaite définir une fonction dans la console Rails
Je veux cliquer sur une broche GoogleMap dans RSpec
Utilisez java1.7 (zulu7) dans un répertoire spécifique avec jenv
Je souhaite ajouter une fonction de suppression à la fonction de commentaire
Implémentation d'une API forte pour "Je veux afficher ~~ à l'écran" avec un simple CQRS
[Java] Je souhaite convertir un tableau d'octets en un nombre hexadécimal
Je veux trouver un chemin relatif dans une situation où Path est utilisé
Je souhaite implémenter une fonction d'édition des informations produit ~ part1 ~
Je veux faire une liste avec kotlin et java!
Je veux appeler une méthode et compter le nombre
Je veux créer une fonction avec kotlin et java!
Je souhaite créer un formulaire pour sélectionner la catégorie [Rails]
Même en Java, je veux afficher true avec un == 1 && a == 2 && a == 3
Je souhaite sauvegarder facilement les fichiers utilisés au travail
Je veux donner un nom de classe à l'attribut select
Je veux créer un fichier Parquet même en Ruby
Je souhaite utiliser FireBase pour afficher une chronologie comme Twitter
Je souhaite renvoyer plusieurs valeurs de retour pour l'argument saisi
Je veux convertir des caractères ...
[Controller] Je veux récupérer la valeur numérique d'une colonne spécifique de la base de données (mon mémo)
Je veux créer un bouton avec un saut de ligne avec link_to [Note]
Je souhaite ajouter une fonction de navigation avec ruby on rails
Je souhaite utiliser le balayage arrière sur un écran qui utilise XLPagerTabStrip
Seulement ce dont je veux me souvenir, 4 modèles pour écrire des tests unitaires
L'histoire de Collectors.groupingBy que je veux garder pour la postérité
Je veux éviter OutOfMemory lors de la sortie de gros fichiers avec POI
Création d'une méthode pour demander Premium Friday (version Java 8)
[Introduction à JSP + Servlet] J'ai joué avec pendant un moment ♬
Je veux extraire entre des chaînes de caractères avec une expression régulière
[Pour les débutants] Je souhaite saisir automatiquement des données pré-enregistrées dans le formulaire de saisie avec une commande de sélection.
[Rails] J'ai découvert les fichiers de migration! (Ajout d'une colonne au tableau)