Leere Verzeichnisse löschen

RungetSvohu

Bekanntes Mitglied
Hallo Leute,

ich habe mir eben ein Programm geschrieben, dass einen Ordner auf meinem Rechner nach leeren Verzeichnissen durchsucht, diese dann ausgibt und falls erwünscht über eine zusätzliche Methode entfernt. Leer ist für mich ein Verzeichnis, wenn dort keine Dateien drin sind (egal in welcher Ebene darunter). Jeder Unterordner eines leeren Verzeichnisses beinhaltet also (wenn überhaupt) auch nur leere Verzeichnisse. Unterordner eines leeren Verzeichnisses wollte ich daher nicht ausgeben.

Das Problem ist nun: Ich habe mein Programm einmal auf einen meiner Ordner ausgeführt und da hat er einiges gelöscht, danach habe ich es nochmals ausgeführt und er hat wieder etwas gelöscht (diesmal nur einen Ordner, vorher viele). Das deutet ja auf einen Fehler hin. Leider habe ich die Ausgabe des ersten Durchlaufs nicht abgespeichert, aber der Fehler sollte ja durch den Code schon sichtbar werden.

Findet ihr den Fehler?

Java:
import java.io.File;
import java.util.ArrayList;
import java.util.List;

public class EmptyFolderSearch {

	private final List<File> emptyFolders;

	public EmptyFolderSearch(String path) {
		this(new File(path));
	}

	public EmptyFolderSearch(File dir) {
		emptyFolders = new ArrayList<File>();
		listEmptyFolders(dir);
		for (File emptyDir : emptyFolders) {
			System.out.println(emptyDir.getAbsolutePath());
		}
	}

	private void deleteThem() {
		for (File emptyDir : emptyFolders) {
			deleteFolder(emptyDir);
		}
	}

	private boolean deleteFolder(File dir) {
		if (dir.isDirectory()) {
			for (File file : dir.listFiles()) {
				deleteFolder(file);
			}
			return dir.delete();
		}
		return false;
	}

	private void listEmptyFolders(File dir) {
		if (isEmpty(dir)) {
			emptyFolders.add(dir);
		} else {
			for (File file : dir.listFiles()) {
				if (file.isDirectory()) {
					listEmptyFolders(file);
				}
			}
		}
	}

	private boolean isEmpty(File dir) {
		if (dir.isDirectory()) {
			for (File file : dir.listFiles()) {
				if (file.isDirectory()) {
					if (!isEmpty(file))
						return false;
				} else {
					return false;
				}
			}
			return true;
		}
		return false;
	}

	public static void main(String[] args) {
		EmptyFolderSearch search = new EmptyFolderSearch("...");
		search.deleteThem();
	}

}
 

Kjubert

Aktives Mitglied
Könnte es daran liegen?

Angenommen Deine Ordnerstruktur sieht so aus:

Code:
Ordner A
-- Ordner B
-- -- Ordner C
-- -- Ordner D
-- Ordner E
-- -- Ordner F
-- Ordner G

So richtig leer sind hier ja nur C, D, F und G.
Wenn das Programm dann ausgeführt wird, sind auch B und E leere Ordner.
Und nach dem zweiten mal ist auch A leer.
 

André Uhres

Top Contributor
Ich bin mir nicht ganz sicher, aber so was scheint mir zumindest suspekt zu sein:
Code:
for (File file : dir.listFiles())
, weil das Array bei jedem Schleifendurchgang neu erstellt wird und auch die Reihenfolge im Array theoretisch ändern kann: There is no guarantee that the name strings in the resulting array will appear in any specific order. Die Seite, die ich oben angegeben habe, zeigt jedenfalls wie man es richtig macht ;).

Gruß,
André
 

Kjubert

Aktives Mitglied
so was scheint mir zumindest suspekt zu sein:
Code:
for (File file : dir.listFiles())
, weil das Array bei jedem Schleifendurchgang neu erstellt wird und auch die Reihenfolge im Array theoretisch ändern kann: There is no guarantee that the name strings in the resulting array will appear in any specific order.

Gruß,
André

Richtig! Den Fehler hatte in einem anderen Kontext auch schon mal! ...sehr guter Punkt!

[EDIT]
Wobei ich mir bei dem neu-erstellen des Arrays nicht sicher bin, ob er das intern nicht korrekt umsetzt (mit temporärem Zwischen-Array oder so). Aber das mit der Reihenfolge schlägt ein und bringt alles durcheinander!
[/EDIT]
 

André Uhres

Top Contributor
Wobei ich mir bei dem neu-erstellen des Arrays nicht sicher bin, ob er das intern nicht korrekt umsetzt (mit temporärem Zwischen-Array oder so).

Ja, Du hast recht, mein Compiler generiert zum Beispiel dies:

Java:
    private void listEmptyFolders(File dir)
    {
        if(isEmpty(dir))
        {
            emptyFolders.add(dir);
        } else
        {
            File arr$[] = dir.listFiles();
            int len$ = arr$.length;
            for(int i$ = 0; i$ < len$; i$++)
            {
                File file = arr$[i$];
                if(file.isDirectory())
                {
                    listEmptyFolders(file);
                }
            }

        }
    }

Gruß,
André
 

RungetSvohu

Bekanntes Mitglied
Code:
Ordner A
-- Ordner B
-- -- Ordner C
-- -- Ordner D
-- Ordner E
-- -- Ordner F
-- Ordner G

Habe das mal probiert mit genau diesem Beispiel (siehe Anhang), aber da löscht er mir gleich alles weg. Also hier macht er es in einem Zug.

Edit: Huch, da kamen ja noch viele Beiträge hinzu, für mich war der von Kjubert (22.09.2012, 17:52 Uhr) der letzte, hatte den Thread schon lange in einem alten Tab offen.
 

Anhänge

  • A.zip
    870 Bytes · Aufrufe: 2
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
R ANT Jar Task soll leere Verzeichnisse ignorieren..? Allgemeine Java-Themen 3
B Leere vererbte Interface-Methoden Allgemeine Java-Themen 8
T PDF-Generierung (itext) - läuft unter Eclipse, bei har aber leere Seite Allgemeine Java-Themen 39
H ArrayList: Leere Elemente finden? Allgemeine Java-Themen 2
KaffeeFan FileWriter nur leere Zeilen beschreiben Allgemeine Java-Themen 3
B LEERE JTable MouseListener + popupmenu Allgemeine Java-Themen 2
127.0.0.1 StringBuffer leere Zeile löschen Allgemeine Java-Themen 8
L leere Konsoleneingabe Allgemeine Java-Themen 10
T Drucken von variabel langen Listen (es kommen nur leere Seiten raus) Allgemeine Java-Themen 2
nrg Leere Objektreferenz mit != null vergleichen Allgemeine Java-Themen 4
G POI: Leere Zelle nimmt keinen Type an Allgemeine Java-Themen 8
G Leere Datei mit PrintWriter trotz flush und close Allgemeine Java-Themen 8
E JExcel- Zugriff auf leere Zellen kommt eine Fehlermeldung Allgemeine Java-Themen 6
G Leere Fenster (Keine Schrift, Reiter/ Buttons) bei Java Allgemeine Java-Themen 5
V Class Document seltsam leere Zeile am Anfang Allgemeine Java-Themen 8
H Leere Tabelle initialisieren Allgemeine Java-Themen 2
B wie behandelt man leere textfelder Allgemeine Java-Themen 11
Nero90 DirectorySync - Verzeichnisse Synchronisieren Allgemeine Java-Themen 3
A Java Verzeichnisse in Combobox Ausgeben JAVA Allgemeine Java-Themen 3
KrokoDiehl Verzeichnisse via FileVisitor löschen Allgemeine Java-Themen 3
G Mit Batch-Datei verzeichnisse löschen Allgemeine Java-Themen 9
G Dateien und Verzeichnisse in einem Verzeichnis zählen Allgemeine Java-Themen 9
F mehrere Verzeichnisse als Parameter Allgemeine Java-Themen 15
S In .jar File Verzeichnisse anlegen Allgemeine Java-Themen 2
F Verzeichnisse auslesen / auflisten in einer html Allgemeine Java-Themen 2
M Rekursiv Verzeichnisse ansehen und auf Muster matchen Allgemeine Java-Themen 6
U wie groß sind Verzeichnisse Allgemeine Java-Themen 11
M löschen in Rot Schwarz Bäumen Allgemeine Java-Themen 6
M lineare Sondierung löschen Allgemeine Java-Themen 2
A Sicheres Löschen von Dateien Allgemeine Java-Themen 7
E Varialbe komplett Löschen Allgemeine Java-Themen 26
O Warum kann ich so keine Elemente löschen und erhalte einen IllegalStateException? Allgemeine Java-Themen 4
J ArrayList, ganze Zeilen löschen oder überspringen Allgemeine Java-Themen 4
glamdring273 Discord JDA, Kanal löschen Allgemeine Java-Themen 0
G Java Editor Löschen doppelter Zahlen einer Liste Allgemeine Java-Themen 2
J RotSchwarzBaum: Löschen mittels insert-Methode Allgemeine Java-Themen 20
D Input/Output Zwischen zwei ID-Räumen unterscheiden und Objekt löschen Allgemeine Java-Themen 16
L Objekt aus Objekt-array "löschen" Allgemeine Java-Themen 2
X Größten Werte in meinem Array löschen? Allgemeine Java-Themen 16
P Erste Schritte Dateien löschen Allgemeine Java-Themen 4
S Einzigartigen String in Datenbank finden und löschen Allgemeine Java-Themen 23
J Datei löschen, die Leerzeichen im Pfad hat Allgemeine Java-Themen 5
R Index in einem Array löschen Allgemeine Java-Themen 10
R Index in einem Array löschen Allgemeine Java-Themen 2
A Referenzen von Bildobjekten löschen Allgemeine Java-Themen 0
I PDF freigeben zum löschen Allgemeine Java-Themen 4
P Löschen eines keys in einer SortedMap Allgemeine Java-Themen 5
P JDK installieren Kann man die Ordner in C:\Users\*\AppData\LocalLow\Sun\Java\.... löschen? Allgemeine Java-Themen 3
X Löschen von einer Zeile in einer Text Datei. Klappt nicht. Allgemeine Java-Themen 4
J Java - Zeile aus Text datei löschen Allgemeine Java-Themen 13
W Arraylist Text Suchen und Datei löschen Allgemeine Java-Themen 5
G Datei löschen Allgemeine Java-Themen 8
R LinkedList und Threads: Strukturprobleme bez. löschen von Elementen Allgemeine Java-Themen 3
Bluedaishi Dateien löschen die älter als das aktuelle Datum sind Allgemeine Java-Themen 9
L Doppelte eintraege im Stringbuffer löschen Allgemeine Java-Themen 4
J Doppelte Buchstaben löschen - letztes Wort macht er nicht Allgemeine Java-Themen 2
M lucene suchen/löschen/hinzufügen Allgemeine Java-Themen 4
S Speichern/Laden/Hinzufügen/Löschen der Array-Wörter; unerwartete Ausgabe Allgemeine Java-Themen 6
V System.out.println an jeder Stelle im Projekt löschen Allgemeine Java-Themen 4
M Batch zum Java Cache löschen Allgemeine Java-Themen 3
R Löschen von Files nicht möglich Allgemeine Java-Themen 11
V Objekt löschen Allgemeine Java-Themen 7
J char-Array löschen Allgemeine Java-Themen 5
W n:m Beziehung Referenzen löschen Allgemeine Java-Themen 5
127.0.0.1 Zeilen in .txt Datei löschen Allgemeine Java-Themen 11
D Löschen-Methode im Stapelverarbeitungsprogramm Allgemeine Java-Themen 4
S JTable und Spalten löschen Frage Allgemeine Java-Themen 5
EnHancEd[] ArrayList gezielt löschen Allgemeine Java-Themen 9
S Nullen aus Array löschen Allgemeine Java-Themen 10
N Java lässt sich nicht löschen! Allgemeine Java-Themen 7
U Wie kann mit einen Java Applet Dateien erstellen,verschieben und löschen? Allgemeine Java-Themen 9
P Input/Output Ordner löschen --> geht nicht Datei --> Ja Allgemeine Java-Themen 6
K Leerzeiilen aus ArrayList löschen?! Allgemeine Java-Themen 7
M Objekt aus Liste in Liste suchen/löschen Allgemeine Java-Themen 6
S Singleton Instanz löschen Allgemeine Java-Themen 5
Z Ausschneiden, Kopieren, Einfügen, Löschen in JTextArea Allgemeine Java-Themen 5
K Java Feld Duplikate löschen Allgemeine Java-Themen 5
F SAXBuilder blockiert löschen von Dateien Allgemeine Java-Themen 2
L Datei sicher löschen/mehrfach überschreiben? Allgemeine Java-Themen 2
S Java komplett löschen und neu installieren Allgemeine Java-Themen 4
N Java geht nicht mehr zu löschen Allgemeine Java-Themen 5
E Regex alles nach ? löschen Allgemeine Java-Themen 4
I Über eine Liste iterieren und Objekte löschen. Wie löst man das sauber? Allgemeine Java-Themen 5
W 2D-Grafik nach getthumbnail läst sich Quellbild nicht mehr löschen Allgemeine Java-Themen 3
E Regex HTML Tag und Inhalt löschen Allgemeine Java-Themen 4
S Zeilen in einer Datei löschen Allgemeine Java-Themen 3
Z aus private List<???> list eintrag löschen Allgemeine Java-Themen 4
C Zeile aus einer CSV-Datei löschen Allgemeine Java-Themen 3
J Element aus HashSet löschen Allgemeine Java-Themen 2
S Element aus ArrayListe löschen --> Thread hängt sich auf Allgemeine Java-Themen 2
A LinkedList Auslesen und Objekt Löschen Allgemeine Java-Themen 4
K von List getSelected auf ResultSet Datenbank löschen Allgemeine Java-Themen 2
S Reihen aus einem 2-dim. Array 'löschen' Allgemeine Java-Themen 2
K Threading - schreiben auf Hashmap/löschen - ConcurrentModificationException Allgemeine Java-Themen 3
A Zeilen aus einer Textdatei löschen Allgemeine Java-Themen 6
M Arraylist - Inhalte in Textferldern anzeigen, verändern und löschen. Allgemeine Java-Themen 18
S Liste Object Löschen Allgemeine Java-Themen 7
G Log4J - Logs älter als 3 Tage löschen Allgemeine Java-Themen 5
Quaxli Files massenhaft löschen Allgemeine Java-Themen 3
J Mit POI Zeile in Excel löschen Allgemeine Java-Themen 5

Ähnliche Java Themen

Neue Themen


Oben