Io non credo di aver esattamente capito a cosa ti serve. Cos'è di preciso SingleContent?
La cosa che non ho capito è perchè cerchi se esiste e matcha il percorso (usando equals) torni il percorso, e se non esiste torni null.
SingleContent è la rappresentazione astratta di una cartella o un file (in questo caso cartella, perché i file sono stati rimossi), con solo le proprietà essenziali.
Però non torna il percorso, torna direttamente la cartella con quel percorso specifico (sempre rappresentata con SingleContent)
Se l'obbiettivo è invece ottenere un File, allora ha senso restituire un File (o null) invece di un boolean.
La ccosa migliore però è appoggiarsi a ciò che già esiste in Java senza reinventare nulla:
https://docs.oracle.com/javase/tutorial/essential/io/walk.html penso ti possa tornare utile.
La classe File l'ho utilizzata in un altro contesto per ottenere questi dati, ma ho scelto di rappresentare file e cartelle con una classe custom invece di usare la classe File. Più flessibilità, e si trattava di un'implementazione di soltanto poche decine di righe di codice.
il primo ciclo è terribile: metti che "content", qualunque cosa sia, abbia 10000 elementi, continui ad eseguire il ciclo inutilmente anche se trovi subito il "path"; al limite devi farlo con un while ed una condizione di uscita immediata
il secondo for è inutile
Ok, questo non l'avevo considerato, perché davo per scontato che tutti i file system fossero come il mio con poche decine di elementi per directory. Correggo il codice
comunque a parte questa osservazione che lascia il tempo che trova, secondo me la cosa non va fatta con un ciclo ma con un if:
- esegui il confronto
- se il confronto va a buon fine ritorni il risultato altrimenti fai una chiamata ricorsiva sul prossimo elemento da esaminare
- se non trova nulla l'ultima istruzione deve necessariamente ritornare null;
questo vale per una singola cartella, poi è eventualmente da aggiustare se ci sono più cartelle da esaminare
Quello che dicevi l'ho pensato anche io all'inizio, ma c'è il problema dell'analisi di più cartelle allo stesso "livello". Cerco di spiegarmi meglio:
mettiamo di avere una cartella contenente altre 3 cartelle, con ognuna delle quali contenente altre 3 cartelle. Il ciclo, togliendo la parte ricorsiva, andrebbe ad esaminare le 3 cartelle iniziali.
Ora, aggiungendo la parte ricorsiva, se non trova nulla nel primo elemento dell'array va ad esaminare il suo contenuto chiamando di nuovo la funzione, esaminando il primo elemento anche di quello e così via. Finite tutte le sotto-directory, sotto-sotto-directory ecc del primo elemento della lista si passa al secondo, grazie al ciclo for.
Dando per scontato che l'elemento esiste (perché di quello sono certo) e che è univoco (e sono certo anche di quello) il problema non è
se esiste, ma
dov'è.
Una volta che l'ha trovato lo ritorna e il resto del programma svolge le operazioni su di esso.
Facciamo che per chiarire eventuali altri dubbi dico anche cosa sto facendo: quella funzione fa parte di uno scanner del file system.
Il programma fa in maniera ricorsiva lo scan di tutte le directory, ne classifica il contenuto (se directory o file, e in caso di file che tipo) e rappresenta il tutto (precedentemente memorizzato in un array 2d) con un b-tree. SingleContent è un nodo dell'albero, e la funzione vi ho chiesto di guardare è un algoritmo di ricerca per trovare una specifica cartella (rappresentata da SingleContent) avendo il percorso, che è univoco