Löschen Sie Dateien in einem Verzeichnis mit Java
-
Löschen Sie Dateien in einem Verzeichnis mit
delete()
derFile
-Klasse in Java - Löschen Sie Dateien in einem Verzeichnis mit Java 8 Streams und NIO2
- Löschen Sie Dateien in einem Verzeichnis mit Apache Common IO
- Abschluss
In diesem Artikel erfahren Sie, wie Sie im Ordner vorhandene Dateien löschen, ohne den Ordner selbst zu löschen.
Es gibt mehrere Möglichkeiten, dies zu tun. Schauen wir sie uns nacheinander an.
Löschen Sie Dateien in einem Verzeichnis mit delete()
der File
-Klasse in Java
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, im Laufwerk D:
unseres Systems existiert ein Verzeichnis mit dem Namen test
, und sagen wir, es enthält einige Textdateien und einige Unterordner. 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);
for (File temp : Objects.requireNonNull(obj.listFiles())) {
if (!temp.isDirectory()) {
temp.delete();
}
}
}
}
Wenn der obige Code ausgeführt wird, können wir sehen, dass alle Dateien in test
gelöscht werden, aber der Hauptordner test
und die Unterordner bleiben unberührt.
Oben haben wir eine String-Variable erstellt, die den Pfad
des Verzeichnisses speichert. Dann haben wir diesen Pfad verwendet, um unser Dateiobjekt obj
zu erstellen.
Dann haben wir die Methode listFiles()
verwendet, um die unter diesem Pfad vorhandenen Inhalte aufzulisten.
Mit der if
-Bedingung prüfen wir, ob es sich um ein Verzeichnis oder eine Datei handelt. Wenn es sich um eine Datei handelt, löschen wir sie; sonst tun wir nichts.
Löschen Sie Dateien in einem Verzeichnis mit Java 8 Streams und NIO2
In dieser Methode können wir die Methode Files.walk(Path)
verwenden, die Stream<Path>
zurückgibt, der alle Dateien und Unterordner enthält, die in diesem Pfad
vorhanden sind.
Dann prüfen wir mit der Bedingung if
, ob es sich um ein Verzeichnis oder eine Datei handelt. Wenn es sich um eine Datei handelt, löschen wir sie; sonst tun wir nichts.
Beispielcode:
import java.io.*;
import java.nio.file.*;
import java.util.*;
public class Demo {
public static void main(String[] args) throws IOException {
Path path = Paths.get("D:\\test");
Files.walk(path).sorted(Comparator.reverseOrder()).forEach(data -> {
try {
if (!Files.isDirectory(data)) {
System.out.println("deleting: " + data);
Files.delete(data);
}
} catch (IOException obj) {
obj.printStackTrace();
}
});
}
}
Ausgang:
deleting: D:\test\subfolder 2\file4.txt
deleting: D:\test\subfolder 1\file3.txt
deleting: D:\test\file2.txt
deleting: D:\test\file1.txt
Wenn der obige Code ausgeführt wird, löscht er alle Dateien des Verzeichnisses und der Unterverzeichnisdateien in einer Tiefensuchweise.
Wir können beobachten, dass das Verzeichnis test
und die Unterverzeichnisse subfolder 1
und subfolder 2
intakt geblieben sind.
Löschen Sie Dateien in einem Verzeichnis mit Apache Common IO
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.cleanDirectory()
verwenden, um alle Dateien und die Unterverzeichnisse innerhalb des Hauptverzeichnisses rekursiv zu löschen, ohne das Hauptverzeichnis selbst 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 die 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.cleanDirectory(obj);
}
}
Abschluss
Dieser Artikel hat verschiedene Möglichkeiten zum Löschen von Verzeichnissen mit Java gezeigt. Wir haben verstanden, wie man die delete()
-Methode und Java 8-Streams verwendet und wie die Verwendung von Apache Commons IO effizienter und zeitsparender sein könnte, wenn LOC (Codezeile) die Leistung unseres Projekts stark beeinflusst.