Dateien werden nicht gelöscht - warum?

White_Fox

Top Contributor
Guten Abend allerseits

Ich habe hier einen Unittest, für den ein paar Dateien erstellt werden müssen.

Java:
public class CLSFileDocumentTest {
    static File testTrackDirectory;
    
    public CLSFileDocumentTest() {
    }
    
    @BeforeClass
    public static void setUpClass() {
    }
    
    @AfterClass
    public static void tearDownClass() {
    }
    
    @Before
    public void setUp() {
        testTrackDirectory = new File("TestTrack");
        testTrackDirectory.mkdir();
    }
    
    @After
    public void tearDown() throws IOException {
        for(File f : testTrackDirectory.listFiles()){
            //System.out.println("Lösche Datei: " + f.getName() + ": " + f.deleteOnExit());
            f.delete();
        }
        testTrackDirectory.delete();
    }
    
    class CLSFileDocumentImplementation extends CLSFileDocument<LibraryRoot>{

        public CLSFileDocumentImplementation(LibraryRoot object) {
            super(object);
        }

        public CLSFileDocumentImplementation(String path) {
            super(path);
        }
        
        @Override
        protected FileTypes getFileType() {
            return FileTypes.LIBRARY;
        }
    }

    /**
     * Test of saveAs method, of class CLSFileDocument.
     */
    @Test
    public void testSaveAs() {
        CLSFileDocument instance;
        String path;
        File f;
        
        System.out.println("saveAs");
        
        path = testTrackDirectory.getAbsolutePath() + File.separator +
                "SaveAs-Test";
        instance = new CLSFileDocumentImplementation(new LibraryRoot("SaveAs-Test Library"));
        instance.saveAs(path);
        
        path = path + FileTypes.LIBRARY.suffix();
        f = new File(path);
        assertTrue(f.exists());
    }
}

Es soll ein Verzeichnis angelegt werden, in diesem sich die zu testende Klasse austoben kann. Danach soll das Verzeichnis wieder gelöscht werden, aber das wird es nicht. Weiß jemand, woran das liegen könnte?
 

TM69

Bekanntes Mitglied
Auf welcher Partition erstellst du das Verzeichnis? Auf C: könnte es aus Sicherheitsbedingungen von Windows sein, dass du kein Verzeichnis erstellen kannst. Und wenn du kein Verzeichnis erstellt hast kann es nicht gelöscht werden, bzw. wenn du per Hand ein Directory erstellst du aus Sicherheitsgründen dieses nicht löschen kannst.

Es kann aber auch sein, dass das Verzeichnis nicht leer ist. Verwende aus z.B. org.apache.commons.io.FileUtils.deleteDirectory die rekursiv, einschließlich der beinhalteten Verzeichnisse und Dateien löscht.
 
Zuletzt bearbeitet:

White_Fox

Top Contributor
@TM69 Das Erstellen des Verzeichnisses klappt (aktuell liegt der Ordner irgendwo im Benutzerordner).
Nur das Löschen geht nicht. Die erste Datei wird gelöscht, aber alle anderen nicht. Ich hab mir mal das Ergebnis der delete-Methode auf der Konsole ausgeben lassen.

@mihe7 Nein, das ist nur ein Ordner mit ein paar Dateien drin. Unterverzeichnisse werden für den Test nicht erstelt.
 

White_Fox

Top Contributor
Oh...tatsächlich.

Ich wollte zuerst schreiben daß die File-Klasse ja keine close()-Methode hat, die hab ich nämlich gesucht. Aber zwei Streams waren noch offen...die habe ich nicht beachtet.
 
K

kneitzel

Gast
Oh...tatsächlich.

Ich wollte zuerst schreiben daß die File-Klasse ja keine close()-Methode hat, die hab ich nämlich gesucht. Aber zwei Streams waren noch offen...die habe ich nicht beachtet.

An dieser Stelle möchte ich einfach einmal auf eine Kleinigkeit hinweisen:
Ein Pattern, welches ich immer anwende, ist:
- Alles was Closeable ist (Also auch Deine Streams) werden in try with resource genutzt, so es lokale Variablen sind.
- Ist es keine lokale Variable sondern eine Instanzvariable, dann wird die Klasse selbst Closeable implementieren.
==> Damit wird dann diese Regel wieder auf die Instanz dieser Klasse angewendet werden müssen und das geht dann halt immer weiter bis halt irgendwann eben eine lokale Variable auftaucht ...

Einzige Ausnahmen kann man sich auch schön bildlich vorstellen, denn das sind sozusagen "göttliche" Variablen. Die existieren von "Ewigkeit zu Ewigkeit" und für die gelten so weltliche Regeln natürlich nicht. Aber wie bei allen göttlichen Dingen: Es ist toll, wenn jemand daran glaubt, aber wir wollen doch möglichst wissenschaftlich bleiben und versuchen daher, so göttliche Dinge zu vermeiden....
==> Da sind wir dann bei statischen Dingen. Also sowas wie System.in, System.out, System.err
(Ja, das ist sehr bildlich und nicht ganz korrekt. Denn natürlich existieren statische Variablen nicht von Ewigkeit zu Ewigkeit, sondern es ist wie immer bei so Programmen vollkommen deterministisch und klar definiert, wann was wie erstellt wird. Aber im Rahmen einer einfach zu merkenden Regel wurde dies einfach ignoriert und ich habe mich als "religösen Fanatiker" geoutet :) )
 

White_Fox

Top Contributor
Junit bietet dafür btw. von Haus aus das passende an (du scheinst noch auf 4 zu sein, für 5 gibts aber was äquivalentes)
HA...das kannte ich noch nicht. Ich arbeite tatsächlich noch mit Version 4. Du hattest ja letzten schonmal einen Hinweis für mich, den ich deswegen leider nicht umsetzen konnte.

Ein Pattern, welches ich immer anwende, ist:
- Alles was Closeable ist (Also auch Deine Streams) werden in try with resource genutzt, so es lokale Variablen sind.
- Ist es keine lokale Variable sondern eine Instanzvariable, dann wird die Klasse selbst Closeable implementieren.
Richtig, try und finally...warum bin ich da nicht schon von alleine drauf gekommen? So mache ich das.
 

mrBrown

Super-Moderator
Mitarbeiter
Ich arbeite tatsächlich noch mit Version 4.Du hattest ja letzten schonmal einen Hinweis für mich, den ich deswegen leider nicht umsetzen konnte.
Gibts denn eigentlich nen Grund für JUnit 4?

Hierbei gehts zwar genausogut mit 4 wie mit 5, 5 ist aber schon ne Ecke netter.


Richtig, try und finally...warum bin ich da nicht schon von alleine drauf gekommen? So mache ich das.
Wobei du finally eigentlich nie selbst brauchst, wenn du try-with-resources nimmst ;)
 

White_Fox

Top Contributor

mrBrown

Super-Moderator
Mitarbeiter
Gegenfrage: was spricht gegen JUnit 4 oder für JUnit 5?
Mir persönlich gefällt die API deutlich besser, sowohl von den Namen als auch der Benutzbarkeit her. zb die Benennung mit @BeforeAll/@BeforeEach statt @BeforeClass/@Before oder das Schachteln von Tests (vorher mit nem extra Runner, mit dem manches nicht ging, jetzt ganz normal mit inneren Klassen.)

Dann finde ich das Extension-Model schöner/praktischer, als das alte mit Rules und Runnern, Parametrizierte Tests sind auch super einfach - fühlt sich einfach alles irgendwie "runder" an
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
J .exe Dateien werden nicht gestartet obwohl Pfad richtig Allgemeine Java-Themen 6
C Kopieren von Dateien die von einem anderen Programm verwendet werden? Allgemeine Java-Themen 7
G Dateien werden beim Kopieren zerstört Allgemeine Java-Themen 4
Thomasneuling Java Jar datei erstellen, von Projekt, dass auch Javafx Dateien, FXML Dateien und CSS Dateien, sowie Bilder enthält? Allgemeine Java-Themen 14
G Dateien lesen Allgemeine Java-Themen 3
OnDemand Unterschiedliche jar Dateien zusammen führen Allgemeine Java-Themen 8
A Sicheres Löschen von Dateien Allgemeine Java-Themen 7
O git ignore für Intellji braucht es die .idea Dateien? Allgemeine Java-Themen 8
Master3000 Dateien zwischen verschiedenen Netzwerken senden Allgemeine Java-Themen 17
L Jar Dateien in Classpath laden ab JDK 9+ Allgemeine Java-Themen 11
d.lumpi JDA eclipse dateien versenden Allgemeine Java-Themen 4
O Produziert das Tool "jpackage" (ab JDK 14) .exe Dateien, die auf einer Zielumgebung ohne JRE lauffähig sind ?` Allgemeine Java-Themen 7
O Wie kann ich in Apache POI (Excel Dateien schreiben) Datumszellen in Excel erzeugen Allgemeine Java-Themen 6
T Meine Frage lautet wie ich 2 CSV Dateien miteinander in Java verbinde und Spalten die zueinander gehören durch den gleichen Key zusammen ausgebe? Allgemeine Java-Themen 5
L Dateien richtig auslesen Allgemeine Java-Themen 6
L Eclipse Runnable Jar mit Dateien Allgemeine Java-Themen 8
W Server-Thread schreibt nicht alle Dateien Allgemeine Java-Themen 6
MiMa Logging mit log4j2 in verschiedene Dateien? Allgemeine Java-Themen 22
I Klassen aus Jar-Dateien aus anderem Ordner laden Allgemeine Java-Themen 3
O jar und EXE Dateien, Pfade zur Laufzeit Allgemeine Java-Themen 1
B Dateien / Bilder von "webapp" Ordner bekommen? Allgemeine Java-Themen 1
P Erste Schritte Dateien löschen Allgemeine Java-Themen 4
H Erste Schritte Ausführbare Dateien lassen sich nicht starten Allgemeine Java-Themen 5
I Java als exe veröffentlichen inkl. kompletter Dateien Allgemeine Java-Themen 4
M Drucken von Dateien Allgemeine Java-Themen 10
J jar Dateien unter Windows 7 mit spezifischer jdk öffnen Allgemeine Java-Themen 2
I Laden von Informationen aus Dateien: Austauschbarkeit: 2 Dateien sinnvoll? Allgemeine Java-Themen 2
N Temporäre Dateien Allgemeine Java-Themen 3
Bluedaishi Druck Probleme mit PDF dateien Allgemeine Java-Themen 4
M Dateien schneller kopieren Allgemeine Java-Themen 1
M Dateien nach kopieren vergleichen Allgemeine Java-Themen 9
Arif Input/Output Dateien im Jar-Programm speichern Allgemeine Java-Themen 12
D Collections.sort funktioniert nicht in exportierten .class Dateien Allgemeine Java-Themen 10
K Große JSON-Dateien schnell und effizient verarbeiten Allgemeine Java-Themen 16
J Programm zum Download von CSV-Dateien Allgemeine Java-Themen 4
V Eclipse .class Dateien Allgemeine Java-Themen 9
B Download von dateien Allgemeine Java-Themen 2
K Nicht alle class-Dateien im JRE? Allgemeine Java-Themen 2
MiMa Log4j in Dateien mit eigenem Namen schreiben Allgemeine Java-Themen 3
D Kopieren von Dateien aus einem Ordner in einen anderen Allgemeine Java-Themen 6
C Dateien in Jar aufrufen Allgemeine Java-Themen 14
X NetBeans Bilder und andere Dateien ins .jar schreiben und wieder aus .jar lesen Allgemeine Java-Themen 6
JavaWolf165 Externe .jar-Dateien in .jar-Datei intigrieren Allgemeine Java-Themen 0
X Dateien für Benutzer Sperren Allgemeine Java-Themen 4
D Dateien aus den Internet herunterladen Allgemeine Java-Themen 6
L Methoden Dateien älter als 30 Tage? Allgemeine Java-Themen 11
RalleYTN Classpath Native Dateien(DLL, SO, JNILIB) Allgemeine Java-Themen 2
J Java .jar Dateien zusammenführen Allgemeine Java-Themen 1
L Best Practice Log Dateien analysieren und eventuell passende Daten am Chart darstellen Allgemeine Java-Themen 1
F Platzsparende Alternative zu .txt-Dateien Allgemeine Java-Themen 12
X Dateien von der Jar zum Ordner kopieren. Allgemeine Java-Themen 4
Ananaskirsche Input/Output Dateien im Ordner Allgemeine Java-Themen 8
A Input/Output Liste der Dateien in einem Ordner in einer Jar Datei erhalten Allgemeine Java-Themen 11
X Herunterladen von Dateien aus dem Internet Allgemeine Java-Themen 2
V Input/Output Sound Dateien aus Jar laden Allgemeine Java-Themen 18
M Dateien aus einem Verzeichnis auf einem Server auflisten Allgemeine Java-Themen 5
H PDFBox akzeptiert Dateien nicht Allgemeine Java-Themen 1
B Java - einlesen von Dateien und herausschneiden von XML Dokumenten Allgemeine Java-Themen 5
A Input/Output Spätes Schreiben von Dateien der JVM Allgemeine Java-Themen 3
M Zwei unterschiedliche JAR Dateien mit ANT erstellen Allgemeine Java-Themen 8
Thallius Dateien Zippen und wieder heraus lesen? Allgemeine Java-Themen 4
T Dateien zur Laufzeit in Java-Programm packen? Allgemeine Java-Themen 3
Maxim6394 Jar Dateien starten nicht Allgemeine Java-Themen 7
U Eclipse Java Programm beschädigt .tar.gz dateien beim Entpacken Allgemeine Java-Themen 7
GUI-Programmer Mp3 Dateien bearbeiten und speichern Allgemeine Java-Themen 3
S Exklusive Sperre auf Dateien: FileChannel, FileLock Allgemeine Java-Themen 0
Bluedaishi Dateien löschen die älter als das aktuelle Datum sind Allgemeine Java-Themen 9
OnDemand Dateien einlesen und vergleichen Allgemeine Java-Themen 1
T Ordner samt Dateien kopieren Allgemeine Java-Themen 11
R Importieren von Txt-Dateien in AbstractTableModel Allgemeine Java-Themen 0
C Dateien komprimieren und verschlüsseln Allgemeine Java-Themen 3
F Eclipse Eclipse kompiliert nicht mehr die aktuellen Dateien Allgemeine Java-Themen 2
R Java Dateien "verschlüsseln" Allgemeine Java-Themen 2
L Passwortgeschützte Dateien Allgemeine Java-Themen 6
A Datentypen Dateien umbenennen mit Dateiendungen - Dateiendungen ausgeben Allgemeine Java-Themen 2
L Reparieren beschädigter PDF Dateien Allgemeine Java-Themen 3
F Dateien ins Array lagern und Optionen zur Auswahl, Allgemeine Java-Themen 5
J XML Dateien vergleichen Allgemeine Java-Themen 9
B Umbenennen von Dateien Allgemeine Java-Themen 2
B Erste Schritte Plugin erkennen und Class Dateien anzeigen lassen Allgemeine Java-Themen 3
W Best Practice Dateien parsen Allgemeine Java-Themen 3
B Dateien verschwinden aus bin Ordner?! Allgemeine Java-Themen 5
B Dateien prüfen auf Gleichheit Allgemeine Java-Themen 5
M Java Dateien verschieben Allgemeine Java-Themen 2
R Wav-Dateien wiederholt abspielen Allgemeine Java-Themen 2
L Methoden Verarbeitung von Größen Dateien Allgemeine Java-Themen 9
B Alt-Griechisch Zeichen in Dateien Allgemeine Java-Themen 2
M JAR Dateien nur mit Compiler Level 1.6 ausführbar Allgemeine Java-Themen 8
E Zugriff auf Dateien im Filesystem überwachen Allgemeine Java-Themen 5
G .jar Dateien lassen sich nicht mehr öffnen Allgemeine Java-Themen 2
M Datentypen Jar-Dateien öffnen nicht mit Java Allgemeine Java-Themen 4
C Mit Java PDF Dateien bearbeiten. Allgemeine Java-Themen 2
B Input/Output .java-Dateien auslesen Allgemeine Java-Themen 17
B Methoden Alle Methoden und Variablen aus Java-Dateien auslesen. Allgemeine Java-Themen 7
E Vorschläge, effizientes Hashing von Dateien für vergleich Allgemeine Java-Themen 7
W Vergleich eines Datenträgers auf neue Dateien Allgemeine Java-Themen 14
C Java-Dateien in einheitlichen Zeichensatz umwandeln Allgemeine Java-Themen 10
E Dateien aus / im JAR Allgemeine Java-Themen 2
K LibreOffice Tabelle Dateien im Format .ods bearbeiten Allgemeine Java-Themen 2
L Input/Output Dateien erstellen, wenn ein JAR ausgeführt wird Allgemeine Java-Themen 13

Ähnliche Java Themen

Neue Themen


Oben