nicht alle Dateien werden gelöscht

tklustig

Erfahrenes Mitglied
Hallo, folgender Code soll eigentlich alle Dateien aus einem Ordner mitsamt dem Ordner löschen. Tut er aber nüscht: Eine Datei bleibt immer übrig, und damit auch der Ordner selber. Warum? Gibt es nicht einen einfacheren Weg, den Ordner zu löschen, auch wenn er nicht leer ist, sowas wie
Bash:
rd /s /q
Java:
    private void deleteFilesAndFolder() {
        File folderOfNewFiles = new File("U:" + File.separator + "OWS_FILES" + File.separator);
        File[] arrayOfNewFiles = folderOfNewFiles.listFiles();
        //lösche alle Dateien im OWS_FILES Ordner
        for (int i = 0; i < arrayOfNewFiles.length; i++) {
            arrayOfNewFiles[i].delete();
        }
        //lösche den Ordner selbst
        folderOfNewFiles.delete();
    }
 
Lösung
Hi,

die File.delete() liefert einen boolean zurück, falls das Löschen fehlschlägt. Den solltest du auch beachten.
Dein Code löscht nicht rekursiv, er löscht nur alle Dateien in einem Ordner, nicht in Sub-Ordnern. Hierzu müsstest du noch eine Schleife einbauen / rekursiv arbeiten.

Hier musst du dann aber auch aufpassen, da das "listFiles()" meines Wissens nach auch "." und ".." zurückgibt.

Grüsse,
BK

// Edit: Ich vermute, dass du auch hier Java 5 brauchst. Ansonsten würde ich dir zu Files.delete() raten, da du hier Exceptions bei einem Fehler bekommst und die Ursache besser rausfinden kannst.

// Edit-2: Hier findest du verschiedene Implementierungen zum Löschen von Dateien: Delete directory with contents in Java
Hi,

die File.delete() liefert einen boolean zurück, falls das Löschen fehlschlägt. Den solltest du auch beachten.
Dein Code löscht nicht rekursiv, er löscht nur alle Dateien in einem Ordner, nicht in Sub-Ordnern. Hierzu müsstest du noch eine Schleife einbauen / rekursiv arbeiten.

Hier musst du dann aber auch aufpassen, da das "listFiles()" meines Wissens nach auch "." und ".." zurückgibt.

Grüsse,
BK

// Edit: Ich vermute, dass du auch hier Java 5 brauchst. Ansonsten würde ich dir zu Files.delete() raten, da du hier Exceptions bei einem Fehler bekommst und die Ursache besser rausfinden kannst.

// Edit-2: Hier findest du verschiedene Implementierungen zum Löschen von Dateien: Delete directory with contents in Java
 
Lösung
Ich kann nur diejenigen Methoden nutzen, die bis einschließlich JDK1.5 vorhanden sind. Im Ordner befinden sich keinerlei Subordner. Ich habe den Aufruf der Methode an den Anfang des Controllers gesetzt, und siehe da, alles funktioniert mit dem Code...
P.S.: Da sowohl der Ordner als auch alle sich darin befindenden Dateien durch das JAVA Programm erzeugt wurden, befinden sich keinerlei *. bz *.. Dateien innerhalb des Ordners
 

Neue Beiträge

Zurück