Ordner mit Java löschen

Suraj P 12 Oktober 2023
  1. Verwenden Sie delete() der File-Klasse, um leere Ordner mit Java zu löschen
  2. Ordner rekursiv mit Java löschen
  3. Verwenden Sie Java 8 Streams und NIO2, um Ordner mit Java zu löschen
  4. Verwenden Sie Apache Common IO, um Ordner mit Java zu löschen
  5. Abschluss
Ordner mit Java löschen

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.

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