Ciao,
Sto seguendo un corso on line per passatempo e sto vedendo di capire se ci sto capendo qualcosa dei vari concetti che vengono presentati.
Così ho provato ad inventarmi un esercizio. L'idea è data una directory eliminare la directory tutti i file e le cartelle della directory e sottodirectory utilizzando file.delete().
Il Siccome file.delete() prevede la cancellazione di file e di directory vuote ho pensato di creare un metodo che alimenti un set con le stringhe relative alle sottodirectory che non è possibile cancellare.
Una volta costruito questo set di stringhe l'idea è quella di ciclare il metodo sulle sotto cartelle in modo da eliminarle.
Ho provato a creare quindi un metodo deliteFile che cancella i file e directory vuote e alimenta un set con le directory non vuote.
poi ho creato un altro metodo che dovrebbe iterare il deliteFile per i path non eliminati.
Questi i due metodi
public void deleteFile(String path) {
Set<String> setDirectory = new HashSet<String>();
File directoryToDelete = new File(path);
File[] files= directoryToDelete.listFiles();
String dinamicPath=null;
if (directoryToDelete.isFile()||directoryToDelete.isDirectory()) {
for (File file : files) {
dinamicPath = file.getPath();
if (!file.delete()) {
setDirectory.add(dinamicPath);
} else {
if (directoryToDelete.isDirectory()) {
setDirectory.remove(dinamicPath);
}
}
}
if (!setDirectory.isEmpty()) {
setDirectory.add(path);
}
Iterator<String> it = setDirectory.iterator();
while (it.hasNext()) {
dirSet.add(it.next());
}
}
}
public void deleteSetFile(Set<String> files) {
boolean isEmpty= files.isEmpty();
Iterator<String> it = files.iterator();
while(it.hasNext()) {
dirSet.add(it.next());
}
while(!isEmpty) {
Set<String> dinamicDirNotEmpty = dirSet;
Iterator<String> it2 = dinamicDirNotEmpty.iterator();
while (it2.hasNext()) {
deleteFile(it2.next());
}
isEmpty = dirSet.isEmpty();
}
}
}
Il problema è che implementato così il deleteSetFile solleva, giustamente, una java.util.ConcurrentModificationException perché il metodo DeleteDirectory modifica gli elementi dell'iterator creando possibili inconsistenze.
volevo chiedere se ci sono modi leciti per gestire delle iterazioni tali per cui all'inizio dell'iterazione non so a prescindere quante iterazioni devo fare?