[Java] Ordner im Order löschen?

3 Antworten

Vom Fragesteller als hilfreich ausgezeichnet

deleteDir() soll vermutlich einen Ordner samt Inhalt löschen. Nur hat sich ein Fehler eingeschlichen: Die Implementierung löscht dir nur dann, wenn der Ordner mindestens eine Datei enthält. Und sind mehrere Dateien drin, wird dir mehrfach gelöscht. Das Löschen wird allerdings fehlschlagen, solange der Ordner nicht leer ist. Damit funktioniert deleteDir() nur, wenn die Liste files in diesem Ordner und allen Unterordnern immer mit einer Datei endet.

Der Befehl dir.delete() muss hinter der Schleife stehen, die den Inhalt löscht.

            } else {
                files[i].delete();
            }
        }
    }
    dir.delete();
}
verreisterNutzer  14.10.2021, 08:13

Ich danke dir.

Das ist die ganze Klasse. Ich hatte einen Großteil des Codes von woanders und habe den mit, wann auch immer, weiteren Funktionen vervollständigt. Quasi wie ein Copy-Paste, aber es das macht mich nicht sofort zum Script-Kiddie :D

0

Siehe:

https://docs.oracle.com/en/java/javase/13/docs/api/java.base/java/nio/file/Files.html#delete(java.nio.file.Path)

This method can be used with the
walkFileTree
method to delete a directory and all entries in the directory, or an entire file-tree where required.

Unter

https://docs.oracle.com/en/java/javase/13/docs/api/java.base/java/nio/file/FileVisitor.html

findest du ein Beispiel für eine Methode, die ein verzeichnis mit allen enthaltenen Dateien löscht.

Erzesel  14.10.2021, 07:27

.walkFileTree scheint nicht das Ende der Fahnenstange zu sein.

https://softwarecave.org/2018/03/24/delete-directory-with-contents-in-java/

Siehe Streams and NIO2

1
Destranix  14.10.2021, 09:07
@Erzesel

Ja, gibt sicherlich noch mehr Möglichkeiten. Habe nach der ersten nicht weiter gesucht.

Im Grunde gibt es auf den gängigen Plattformen ja Terminal-Anweisungen, die Directories rekursiv löschen, da sollte es Java eigentlich auch hinbekommen können, derartige Funktionen anzubieten.

0

Hey,

das hier ist der Code, welchen ich immer zum rekursive Löschen von Ordnern nutze.

private static void deleteRecursively(File file) {
    try {
        Files.walk(file.toPath())
                .sorted(Comparator.reverseOrder())
                .map(Path::toFile)
                .forEach(File::delete);
    } catch (IOException ex) {
        ex.printStackTrace();
    }
}

Mfg Jannick (L1nd)

Woher ich das weiß:eigene Erfahrung
verreisterNutzer  14.10.2021, 09:41

Ah moin du bists :D

Kannst du mir den kleinen Code etwas erklären? Bspw. das "::" und ".map"🤔

0