|
|||||||
|
|
|
![]() |
|
|
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 : 29-07-2010 alle 00: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: 20:38.



















