Prima di eseguire il debug della funzione ricorsiva con ritardo dell'ora: esiste un comando per ottenere sottodirectory? giveMeSubDirs(downToPath)
?Java: come ottenere ricorsivamente tutte le sottodirectory?
// 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;
}
Sintesi sul codice:
- andare in profondità per l'albero delle directory possibile. Quando non c'è una dir in una dir, fermati, metti la dir sull'insieme, attraversa. Non controllare le dir nel set.
- Arrestare e restituire il set se si raggiunge il percorso di partenza.
- Ripetere i passaggi 1 e 2.
PREMESSA: la directory-struttura è finito e con una piccola quantità di dati.
IMO è meglio andare top-down poi bottom-up (come nel mio soluzione qui di seguito :)). È più naturale in questo modo e non è necessario memorizzare i percorsi su livelli intermedi. – pajton
Cosa stai cercando di fare? Stai cercando di elencare tutte le sottodirectory finché non raggiungi un certo livello? – OscarRyz
Nel titolo si dice: "ricorsivamente" ma nel tuo codice non è ricorsivo? Stai cercando una soluzione ricorsiva o per una soluzione non ricorsiva? Qual è il nome completo per 'FileObject' è quello' javax.tools.FileObject' – OscarRyz