Angenommen, ich habe eine File f
das ein Verzeichnis darstellt, dann f.delete()
wird das Verzeichnis nur gelöscht, wenn es leer ist. Ich habe eine Paar von Beispiele online, die die File.listFiles()
o File.list()
um alle Dateien im Verzeichnis zu erhalten und durchläuft dann rekursiv die Verzeichnisstruktur und löscht alle Dateien. Da es jedoch möglich ist, unendlich viele rekursive Verzeichnisstrukturen zu erstellen (sowohl in Windows und Linux (mit symbolischen Links)) ist es vermutlich möglich, dass Programme, die in diesem Stil geschrieben wurden, niemals beendet werden.
Gibt es also einen besseren Weg, ein solches Programm zu schreiben, so dass es nicht in diese Fallen fällt? Muss ich alle Orte, die ich durchquert habe, im Auge behalten und sicherstellen, dass ich mich nicht im Kreis drehe, oder gibt es einen besseren Weg?
Aktualisierung: Als Antwort auf einige der Antworten (vielen Dank, Leute!) wäre es mir lieber, wenn der Code nicht den symbolischen Links folgen und innerhalb des Verzeichnisses bleiben würde, das er löschen soll. Kann ich mich auf die Commons-IO-Implementierung verlassen, um das zu tun, auch im Fall von Windows?