Antes de depurar la función recursiva de última hora de salida: ¿hay un comando para obtener subdirectorios? giveMeSubDirs(downToPath)
?Java: ¿cómo obtener todos los subdires recursivamente?
// 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;
}
Resumen sobre el código:
- ir tan profundo como para el árbol de directorios como sea posible. Cuando no hay un directorio en un directorio, deténgalo, coloque el directorio en el conjunto, recorra hacia arriba. No verifique los directorios en el conjunto.
- Detenga y devuelva el conjunto si llega a la ruta de inicio.
- Repita los pasos 1 y 2.
premisa: la estructura de directorios es finito y con una cantidad pequeña de datos.
OMI es mejor ir de arriba hacia abajo y luego de abajo hacia arriba (como en mi solución a continuación :)). Es más natural de esta manera y no es necesario almacenar las rutas en niveles intermedios. – pajton
¿Qué estás tratando de hacer? ¿Estás tratando de enumerar todos los subdirectorios hasta que alcances un cierto nivel? – OscarRyz
En el título dice: "recursivamente" pero en su código no es recursivo? ¿Está buscando una solución recursiva o no recursiva? ¿Cuál es el nombre completo de 'FileObject' es' javax.tools.FileObject' – OscarRyz