Ich möchte alle Dateien im ABC-Verzeichnis löschen.
Wenn ich es versucht FileUtils.deleteDirectory(new File("C:/test/ABC/"));
habe, wird auch der Ordner ABC gelöscht.
Gibt es eine Einzeilerlösung, bei der ich Dateien innerhalb eines Verzeichnisses löschen kann, jedoch nicht eines Verzeichnisses?
java
file-io
apache-commons-io
Fahim Parkar
quelle
quelle
rm -rf directory; mkdir directory
schneller ist als die VerwendungFileUtils.cleanDirectory
.Antworten:
Diese Methode ist in derselben Datei verfügbar. Dadurch werden auch alle Unterordner und Dateien unter ihnen rekursiv gelöscht.
Docs:
org.apache.commons.io.FileUtils.cleanDirectory
quelle
rm -rf directory
viel effizienter war als das VerwendenFileUtils.cleanDirectory
.Meinst du wie?
Dadurch werden nur Dateien gelöscht, keine Verzeichnisse.
quelle
for(File file: dir.listFiles())
ist wahrscheinlich gemeint als ....for (File file : new java.io.File("C:\\DeleteMeFolder").listFiles())
...Peter Lawreys Antwort ist großartig, weil sie einfach ist und nicht von etwas Besonderem abhängt, und so sollten Sie es tun. Wenn Sie etwas benötigen, das auch Unterverzeichnisse und deren Inhalt entfernt, verwenden Sie die Rekursion:
Ändern Sie Folgendes, um Unterverzeichnisse und deren Inhalt (Teil Ihrer Frage) zu schonen:
Oder, weil Sie eine einzeilige Lösung wollten:
Die Verwendung einer externen Bibliothek für eine solche triviale Aufgabe ist keine gute Idee, es sei denn, Sie benötigen diese Bibliothek ohnehin für etwas anderes. In diesem Fall ist es vorzuziehen, vorhandenen Code zu verwenden. Sie scheinen die Apache-Bibliothek ohnehin zu verwenden, verwenden Sie also ihre
FileUtils.cleanDirectory()
Methode.quelle
Java 8 Stream
Dadurch werden nur Dateien aus ABC gelöscht (Unterverzeichnisse bleiben unberührt):
Dadurch werden nur Dateien aus ABC (und Unterverzeichnissen) gelöscht :
^ Diese Version erfordert die Behandlung der IOException
quelle
Oder um dies in Java 8 zu verwenden:
Schade, dass die Ausnahmebehandlung so umfangreich ist, sonst wäre es ein Einzeiler ...
quelle
quelle
Eine weitere Java 8 Stream-Lösung zum Löschen des gesamten Inhalts eines Ordners, einschließlich der Unterverzeichnisse, jedoch nicht des Ordners selbst.
Verwendung:
und der Code:
Das Problem bei jeder Stream-Lösung mit Files.walk oder Files.delete besteht darin, dass diese Methoden eine IOException auslösen, die in Streams nur schwer zu handhaben ist.
Ich habe versucht, eine möglichst präzise Lösung zu finden.
quelle
Um alle Dateien aus dem Verzeichnis zu löschen, sagen Sie "C: \ Beispiel".
quelle
rm -rf
war viel performanter alsFileUtils.cleanDirectory
.Keine Einzeiler-Lösung, aber nach umfangreichem Benchmarking stellten wir fest, dass die Verwendung
rm -rf
um ein Vielfaches schneller war als die VerwendungFileUtils.cleanDirectory
.Wenn Sie ein kleines oder einfaches Verzeichnis haben, spielt das natürlich keine Rolle, aber in unserem Fall hatten wir mehrere Gigabyte und tief verschachtelte Unterverzeichnisse, in denen es über 10 Minuten
FileUtils.cleanDirectory
und nur 1 Minute dauern würderm -rf
.Hier ist unsere grobe Java-Implementierung, um dies zu tun:
Es lohnt sich zu versuchen, wenn Sie mit großen oder komplexen Verzeichnissen arbeiten.
quelle
Wenn Sie alle Dateien löschen möchten, entfernen Sie
Aussage, es wird funktionieren.
quelle
Ich denke, das wird funktionieren (basierend auf der vorherigen Antwort von NonlinearFruit):
Prost!
quelle