Ordner mit Java löschen
-
Verwenden Sie
delete()
derFile
-Klasse, um leere Ordner mit Java zu löschen - Ordner rekursiv mit Java löschen
- Verwenden Sie Java 8 Streams und NIO2, um Ordner mit Java zu löschen
- Verwenden Sie Apache Common IO, um Ordner mit Java zu löschen
- Abschluss
In diesem Artikel erfahren Sie, wie Sie Ordner/Verzeichnisse mit der Programmiersprache Java löschen. Es gibt mehrere Möglichkeiten, dies zu tun. Schauen wir sie uns nacheinander an.
Verwenden Sie delete()
der File
-Klasse, um leere Ordner mit Java zu löschen
In Java haben wir die Klasse java.io.File
, die eine Methode namens delete()
enthält, die zum Löschen von Dateien und leeren Verzeichnissen verwendet wird.
Syntax:
file_object.delete()
Nehmen wir an, dass auf dem Laufwerk D:
unseres Systems ein leeres Verzeichnis mit dem Namen test
existiert. Sehen wir uns nun an, wie dies mit der Methode delete()
gelöscht wird.
Beispielcode:
import java.io.File;
public class Example {
public static void main(String[] args) {
String path = "D:\\test";
File obj = new File(path);
obj.delete();
}
}
Wenn der obige Code ausgeführt wird, sehen wir, dass der Ordner test
vom Laufwerk D:
unseres Systems gelöscht wird.
Im obigen Code haben wir eine Zeichenfolgenvariable erstellt, die den Pfad des Verzeichnisses speichert. Dann haben wir diesen Pfad verwendet, um unser Dateiobjekt obj
zu erstellen.
Zuletzt haben wir die Methode delete()
verwendet, die das Verzeichnis unter diesem Pfad löscht, auf das das Dateiobjekt obj
verweist.
Was aber, wenn der Ordner test
einige Dateien enthält, sagen wir file1.txt
und file2.txt
? Wenn in diesem Szenario der obige Code ausgeführt wird, passiert nichts, da das Verzeichnis nicht leer ist, und wir wissen, dass die Methode delete()
nur für leere Verzeichnisse funktioniert.
Wir können dieses Problem des Löschens nicht leerer Verzeichnisse durch rekursives Löschen lösen.
Ordner rekursiv mit Java löschen
In dieser Methode verwenden wir die Methode delete()
zusammen mit der Rekursion. Die Idee ist, zuerst alle Unterordner und Dateien in unserem Verzeichnis test
zu löschen, und sobald es leer ist, können wir es mit der Methode delete()
löschen.
Verzeichnisaufbau:
test
/ | \
/ | \
/ | \
file1.txt | file2.txt
|
hero
/ \
file3.txt file4.txt
Wir haben einen Ordner test
im Laufwerk D:
, der zwei Textdateien enthält: file1.txt
und file2.txt
und einen Unterordner hero
, der wiederum zwei Textdateien enthält: file3.txt
und file4.txt
.
Hier löschen wir also file1.txt
, file2.txt
und gehen dann in den Unterordner hero
und löschen file3.txt
und file4.txt
. Da der Unterordner leer ist, können wir ihn einfach löschen.
Nach all dem wird auch das Verzeichnis test
leer, das mit der Methode delete()
einfach gelöscht werden kann.
Algorithmus:
-
Holen Sie sich alle Dateien und Unterordner des zu löschenden Verzeichnisses.
-
Alle untergeordneten Elemente, die keine Verzeichnisse sind, dh Dateien, sollten gelöscht werden.
-
Beenden Sie die Rekursion.
-
Wiederholen Sie die Schritte 1 bis 3 für jedes Kind, das ein Unterordner/Unterverzeichnis ist, rekursiv.
-
Löschen Sie das Hauptverzeichnis mit der Methode
delete()
.
Wir müssen zwei Funktionen verwenden, um den obigen Algorithmus zu implementieren: listFiles()
und isDirectory()
.
Die Methode listFiles()
gibt ein Array abstrakter Pfade (Objekte) aller Dateien und Unterordner in unserem Zielverzeichnis zurück. isDirectory()
ist eine boolesche Funktion, die true
zurückgibt, wenn das aktuelle Objekt ein Verzeichnis ist; andernfalls gibt es false
zurück.
Beispielcode:
import java.io.File;
public class Example {
static void recursiveDelete(File targetDirectory) {
File[] data = targetDirectory.listFiles();
for (File file : data) {
if (file.isDirectory())
recursiveDelete(file);
else
file.delete();
}
targetDirectory.delete();
}
public static void main(String[] args) {
String path = "D:\\test";
File obj = new File(path);
recursiveDelete(obj);
}
}
Verwenden Sie Java 8 Streams und NIO2, um Ordner mit Java zu löschen
In dieser Methode können wir die Methode Files.walk(Path)
verwenden, die Stream<Path>
zurückgibt, der alle Dateien und Unterordner in diesem Pfad enthält.
Beispielcode:
import java.io.*;
import java.nio.file.*;
import java.util.*;
public class Example {
public static void main(String[] args) throws IOException {
Path path = Paths.get("D:\\test");
Files.walk(path).sorted(Comparator.reverseOrder()).forEach(data -> {
try {
System.out.println("deleting: " + data);
Files.delete(data);
} catch (IOException obj) {
obj.printStackTrace();
}
});
}
}
Wenn der obige Code ausgeführt wird, löscht er den gesamten Inhalt des Verzeichnisses und dann das Verzeichnis selbst in einer Tiefensuchweise.
Ausgang:
deleting: D:\test\hero\file4.txt
deleting: D:\test\hero\file3.txt
deleting: D:\test\hero
deleting: D:\test\file2.txt
deleting: D:\test\file1.txt
deleting: D:\test
Verwenden Sie Apache Common IO, um Ordner mit Java zu löschen
Bisher sind alle Methoden, die wir gesehen haben, einfache alte Java-Methoden, die einige Konzepte der Rekursion zusammen mit den Methoden file
und stream
verwenden. Aber wir können Apache Common IO FileUtils.deleteDirectory
verwenden, um ein Verzeichnis zu löschen.
Der Hauptvorteil gegenüber primitiven Java-Methoden besteht darin, dass die Codezeile (LOC) erheblich geringer ist, was das Schreiben einfacher und effizienter macht.
Um Apache Common IO zu verwenden, müssen wir zuerst Abhängigkeiten in unserer pom.xml
-Datei hinzufügen.
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.11.0</version>
</dependency>
Beispielcode:
import java.io.*;
import org.apache.commons.io.FileUtils;
public class Example {
public static void main(String[] args) throws IOException {
String path = "D:\\test";
File obj = new File(path);
FileUtils.deleteDirectory(obj);
}
}
Abschluss
Dieser Artikel hat verschiedene Möglichkeiten zum Löschen von Verzeichnissen mit Java gezeigt. Wir haben verstanden, wie man Rekursion und Java 8-Streams verwendet.
Wir haben auch verstanden, wie die Verwendung von Apache Commons IO effizienter und zeitsparender sein könnte, wo LOC (Codezeile) die Leistung unseres Projekts stark beeinflusst.