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?
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();
}
}