Input/Output Datei kann nicht gelöscht werden, obwohl Streams geschlossen sind.

RySa

Bekanntes Mitglied
Hi 🙂

Ich bin seit fast ner Stunde dabei folgendes Problem zu lösen:

Ich arbeite weiterhin an meinem Tool (Link zum Thread in der Signatur) und habe das Problem, dass ich Dateien nicht verschieben/löschen kann, obwohl zu dem Zeitpunkt schon alle Streams geschlossen sind (habe es auch gründlich debuggt). Also nachdem eine Datei ausgelesen und verändert in eine neue Datei geschrieben wurde, will ich nun die alte Datei löschen und die neue an deren Stelle verschieben. Ich kann es aber weder über File.renameTo() machen, noch manuell. Auch wenn ich mir mal einfach am ende eine System.out.println() Nachricht ausgeben lasse, und da ein Breakpoint setze, und wenn es anhält ich manuell versuche die Datei zu verschieben/entfernen (also die alte), geht es einfach nicht, weil die angeblich benutzt wird. Zu der alten Datei habe ich ein File Objekt, ein InputStream, ein InputStreamReader und ein InputSource. Das Inputsource wird dem parser übergeben (SAX Parser). InputStream und InputStreamReader schließe ich direkt nach dem parsen. Es sind sonst keine weiteren Streams offen und ich komme da einfach nicht weiter.

Kann es sein, dass das File-Objekt irgendwie das löschen der Datei verhindert ? (ich bin mir aber zu 99% sicher, dass nicht).

Hat jemand ne Idee ?
 
schreibe dir ein einfaches Testprogramm welches die Vorgänge in etwa simuliert bzw. einfach nur per FileInputStream einliest, woanders speichert, Stream schließt,
geht Löschen oder nicht?

wenn ja wird irgendwas in deinem Programm das Problem sein, vielleicht diese InputSource,
man kann eine InputSource aus einem beliebigen InputStream bzw. Reader erstellen,
kopiere die Datei in den Speicher, byte[] oder String und lasse die unbekannten Tools darauf ackern,
ByteInputStream, StringReader,
dann sollte das deine Datei nicht (mehr) tangieren, du musst dich nur um deinen eigenen Einlesevorgang kümmern
 
Also ich glaub ich muss beim nächsten mal direkt ein Thread schreiben und kriege das Problem auch direkt gelöst...ist schon das 5-te mal, dass ich nach einer Stunde mal ne Frage stelle, und fast direkt danach es selber löse ^^

Das Problem war, dass ich (ausversehen) doch noch einen InputStream offen hatte(der allerdings keiner Variable zugewiesen war, also in der "Nirvana" war 😛) Das hab ich jetzt mal ganz schnell geändert und zur Sicherheit vor dem Versuch die Dateien zu verschieben/entfernen nochmal den guten alten Freund Garbage Collector freundlich gebeten zu kommen 🙂

EDIT: Trotzdem Danke für deine sehr schnelle Antwort SlaterB 🙂
 
Zuletzt bearbeitet:

Zurück
Oben