Avant de déboguer la fonction recursive-out-of-bound-late-hour-out-of-bound: existe-t-il une commande pour obtenir des sous-répertoires? giveMeSubDirs(downToPath)
?Java: comment obtenir récursivement tous les sous-répertoires?
// WARNING: RECURSION out of bound or too much data
public HashSet<FileObject> getAllDirs(String path) {
HashSet<FileObject> checkedDirs = new HashSet<FileObject>();
HashSet<FileObject> allDirs = new HashSet<FileObject>();
String startingPath = path;
File fileThing = new File(path);
FileObject fileObject = new FileObject(fileThing);
for (FileObject dir : getDirsInDir(path)) {
// SUBDIR
while (!checkedDirs.contains(dir)
&& !(getDirsInDir(dir.getFile().getParent()).size() == 0)) {
// DO NOT CHECK TOP DIRS if any bottom dir UNCHECKED!
while (uncheckedDirsOnLevel(path, checkedDirs).size() > 0) {
while (getDirsInDir(path).size() == 0
|| (numberOfCheckedDirsOnLevel(path, checkedDirs)==getDirsInDir(path).size())) {
allDirs.add(new FileObject(new File(path)));
checkedDirs.add(new FileObject(new File(path)));
if(traverseDownOneLevel(path) == startingPath)
return allDirs;
//get nearer to the root
path = traverseDownOneLevel(path);
}
path = giveAnUncheckedDir(path, checkedDirs);
if (path == "NoUnchecked.") {
checkedDirs.add(new FileObject((new File(path)).getParentFile()));
break;
}
}
}
}
return allDirs;
}
Résumé sur le code:
- Aller aussi profond à l'arborescence de répertoires que possible. Quand il n'y a pas de dir dans un répertoire, arrêtez, placez le dir dans l'ensemble, passez en haut. Ne pas vérifier dirs dans l'ensemble.
- Arrêtez et renvoyez l'ensemble si vous atteignez le chemin de départ.
- Répétez les étapes 1 et 2.
HYPOTHÈSE: la structure des répertoires est fini et avec une petite quantité de données.
l'OMI, il est préférable d'aller de haut en bas puis de bas en haut (comme dans ma solution ci-dessous :)). C'est plus naturel de cette façon et vous n'avez pas besoin de stocker les chemins sur les niveaux intermédiaires. – pajton
Qu'essayez-vous de faire? Essayez-vous de lister tous les sous-répertoires jusqu'à ce que vous atteigniez un certain niveau? – OscarRyz
Dans le titre dit: "récursivement" mais dans votre code n'est pas récursif? Vous recherchez une solution récursive ou non récursive? Quel est le nom complet de 'FileObject' est que' javax.tools.FileObject' – OscarRyz