|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Senior Member
Iscritto dal: Aug 2008
Città: Busto Arsizio (Va)
Messaggi: 4381
|
[Java]Ottenere lista file di cartella e sottocartelle
Salve a tutti.
Sto provando a fare un piccolo applicativo Java che dovrebbe restituirmi un file di testo contenente la lista di tutti i file di una cartella indicata e di tutte le sue sottocartelle... Ottenere la lista dei fila della cartella indicata non è un problema, ma ottenere anche quelli di tutte le sottocartelle mi sta dando qualche grattacapo. In teoria, basterebbe realizzare un metodo ricorsivo ad hoc, ma a quanto pare il codice non è corretto: compila ed esegue, ma mi restituisce solo i file della cartella indicata, ignorando le sottocartelle. Qualche idea? Codice:
public String[] listSubDir(File dir) { LinkedList<String> temp = new LinkedList<String>(); File[] list = dir.listFiles(); for (int i = 0; i < list.length; i++){ if (list[i].isDirectory()) this.listSubDir(list[i]); else { String[] split = list[i].getName().split("\\."); String str = split[0]; if (split.length > 2) for (int k = 1; k < split.length - 1; k++) str += "." + split[k]; temp.add(str); } } String[] temp1 = temp.toArray(new String[temp.size()]); return temp1; }
__________________
NZXT H7 Flow RGB | CoolerMaster SilentPro M 850W | Asus ROG Strix X370-I Gaming | AMD Ryzen 7 5800x, NZXT Kraken x62 | G.Skill Trident-Z DDR4 2x16GB 3600Mhz | PowerColor Reaper AMD RX 9070XT | WD Black SN850X 2TB | SteelSeries Siberia V2, Logitech G513, SteelSeries Rival 600, Corsair MM200 | Dell U2515H |
![]() |
![]() |
![]() |
#2 |
Member
Iscritto dal: Aug 2005
Messaggi: 168
|
Il tuo problema è dovuto al fatto che ogni chiamata ricorsiva ti ritorna un array che dovrebbe contenere tutti i file sotto di essa e che tu ignori. Infatti l'unica cosa che ti scrive è cioè che ti restituisce la prima chiamata, che probabilmente è quello che passi al FileWriter.
![]() |
![]() |
![]() |
![]() |
#3 |
Senior Member
Iscritto dal: Aug 2008
Città: Busto Arsizio (Va)
Messaggi: 4381
|
Sinceramente è un problema che così, a pelle, non saprei come risolvere
![]() Dovrei creare un secondo metodo (ricorsivo) che richiama questo?
__________________
NZXT H7 Flow RGB | CoolerMaster SilentPro M 850W | Asus ROG Strix X370-I Gaming | AMD Ryzen 7 5800x, NZXT Kraken x62 | G.Skill Trident-Z DDR4 2x16GB 3600Mhz | PowerColor Reaper AMD RX 9070XT | WD Black SN850X 2TB | SteelSeries Siberia V2, Logitech G513, SteelSeries Rival 600, Corsair MM200 | Dell U2515H |
![]() |
![]() |
![]() |
#4 |
Member
Iscritto dal: Aug 2005
Messaggi: 168
|
Nono, basta che appendi ogni volta il risultato a temp. Ti farei un esempio ma non sono molto fluente in java.
EDIT: Guardando meglio il codice mi sa che basta fare così Codice:
public String[] listSubDir(File dir) { LinkedList<String> temp = new LinkedList<String>(); File[] list = dir.listFiles(); for (int i = 0; i < list.length; i++){ if (list[i].isDirectory()) temp.add(this.listSubDir(list[i])); else { String[] split = list[i].getName().split("\\."); String str = split[0]; if (split.length > 2) for (int k = 1; k < split.length - 1; k++) str += "." + split[k]; temp.add(str); } } String[] temp1 = temp.toArray(new String[temp.size()]); return temp1; } EDIT2: Manca ancora qualcosa perchè andresti ad aggiungere un String[] ad una lista di String. Ma non dovresti trovare problemi a risolverlo. Ultima modifica di Kenger : 28-07-2010 alle 23:05. |
![]() |
![]() |
![]() |
#5 |
Senior Member
Iscritto dal: Aug 2008
Città: Busto Arsizio (Va)
Messaggi: 4381
|
Grazie mille per la risposta
![]() Domani, con un po' più di lucidità, mi ci metterò dietro ![]()
__________________
NZXT H7 Flow RGB | CoolerMaster SilentPro M 850W | Asus ROG Strix X370-I Gaming | AMD Ryzen 7 5800x, NZXT Kraken x62 | G.Skill Trident-Z DDR4 2x16GB 3600Mhz | PowerColor Reaper AMD RX 9070XT | WD Black SN850X 2TB | SteelSeries Siberia V2, Logitech G513, SteelSeries Rival 600, Corsair MM200 | Dell U2515H |
![]() |
![]() |
![]() |
#6 |
Junior Member
Iscritto dal: Jul 2010
Messaggi: 5
|
Codice:
public String[] getFileList(String parent) { List<String> files = new ArrayList<String>(); Stack<File> stack = new Stack<File>(); stack.push(new File(parent)); while(!stack.isEmpty()) { File[] children = stack.pop().listFiles(); if(children == null || children.length == 0) continue; for(File f: children) { if(f.isDirectory()) { stack.push(f); } else { files.add(f.getName()); } } } String[] ret = new String[files.size()]; files.toArray(ret); return ret; } |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 02:22.