Dateien garantiert löschen

Dr$arez

Grünschnabel
Hallo liebe Java-Gemeinde,

seit langem habe ich mal wieder ein scheinbar unlösbares Problem: Dateien zu löschen.

Der Code zum löschen der Datei wurde lehrbuchgerecht geschrieben. Der Haken: ich arbeite auf legacy code und ich bin mir nicht sicher, ob der Stream zur Datei garantiert vorher geschlossen wurde. Ergebnis: mal wird die gewünschte Datei gelöscht und mal nicht!

Gibt es entweder eine Möglichkeit, alle offenen Data-Streams zu erfragen und zu schließen, oder eine wirklich brutale Methode eine Datei aus Java heraus zu vernichten? Ich muss mir sicher sein, dass nach der von euch vorgeschlagenen Methode die Datei nicht mehr unter Windows/BS zu finden ist.

Danke für jeden produktiven Vorschlag

TS
 
Hi TS,
mit reinem Java fällt mir da auch keine Lösung ein. Alternativ könntest du aus Java direkt ein Shell Command absetzten. Wenn es nur für Windows funktionieren muss sollte ein "del /f" funktionieren.

vg,
ck.
 
Hallo zusammen,

darüber bin ich auch schon mehrfach gestolpert. Wir haben es meistens so gelöst, dass die Dateien per Shell Skript abgeräumt worden sind. Normalerweise sollte File#deleteOnExit() das erledigen.

Nach ein wenig Suchen, habe ich einen immer noch offenen Bugeintrag bei Sun gefunden. In dem Eintrag wird darauf hingewiesen, dass das Flag FILE_SHARE_DELETE genutzt werden soll, wenn Streams auf die Datei geöffnet werden. Damit würde das delete ermöglicht, obwohl immer noch Streams offen sind. Aber Du arbeitest mit legacy Code, also hast Du darauf keinen Einfluss(?).

Ganz unten im Beitrag sieht man, dass im JDK 7 an einer Lösung gearbeitet wird :/

Eine Idee wäre,
  1. sich alle Instanzen der fraglichen Streams aus der VM zu holen
  2. über die Streams zu iterieren
  3. wenn der Stream auf die fragliche Datei zeigt -> schließen
Bleibt das Problem alle Instanzen der Typen zu bekommen. Bei StackOverflow habe ich dazu eine Frage gefunden ... müsstest aber noch etwas suchen. Ansonsten wüsste ich nicht, wie Du dem Legacy Problem Herr werden könntest.

Gruß Sen
 
Zurück