[Java] Ordner im Order löschen?
public static void deleteDir(File dir) {
File[] files = dir.listFiles();
if (files != null) {
for (int i = 0; i < files.length; i++) {
if (files[i].isDirectory()) {
deleteDir(files[i]);
} else {
files[i].delete();
dir.delete();
}
}
}
}
public static void main(String[] args) throws IOException {
deleteDir(new File("C:/Users/USER/Documents/JavaCopy/neu"));
Path startingDir = FileSystems.getDefault().getPath("C:/Users/USER/Documents/JavaCopy/alt", new String[0]);
Path destDir = FileSystems.getDefault().getPath("C:/Users/USER/Documents/JavaCopy/neu", new String[0]);
Files.walkFileTree(startingDir, new Copy(startingDir, destDir));
}
Das sorgt dafür, dass die Dateien in dem Ordner gelöscht werden, aber wie löscht man den ganzen Ordner an sich bzw. wie löscht man alle Ordner in einem Ordner?
3 Antworten
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();
}
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
Siehe:
This method can be used with thewalkFileTree
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.
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.
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)
Ah moin du bists :D
Kannst du mir den kleinen Code etwas erklären? Bspw. das "::" und ".map"🤔
.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