Löschen Sie Dateien in einem Verzeichnis mit Java

Suraj P 12 Oktober 2023
  1. Löschen Sie Dateien in einem Verzeichnis mit delete() der File-Klasse in Java
  2. Löschen Sie Dateien in einem Verzeichnis mit Java 8 Streams und NIO2
  3. Löschen Sie Dateien in einem Verzeichnis mit Apache Common IO
  4. Abschluss
Löschen Sie Dateien in einem Verzeichnis mit Java

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.

Autor: Suraj P
Suraj P avatar Suraj P avatar

A technophile and a Big Data developer by passion. Loves developing advance C++ and Java applications in free time works as SME at Chegg where I help students with there doubts and assignments in the field of Computer Science.

LinkedIn GitHub

Verwandter Artikel - Java File