probleme mit file löschen

Status
Nicht offen für weitere Antworten.

tbroich

Mitglied
hallo zusammen,

habe ein problem mit dem löschen eines files..

über einen showSaveDialog des JFileChooser wähle und erstelle ich eine datei. (inputFile)
dieser inputFilesollte jedoch nur temporär sein.

in diesen inputFile schreibe ich dann daten rein. schreibe xml-attribute rein.

wenn dies getan ist, ist dieser temporäre inputFile fertig.

diesen inputFile verwende ich dann über einen bufferdReader als input.
und eine neue datei als outputFile.

einen bearbeiteten teil des inputFile schreibe ich dann in den outputFile.

nach der bearbeitung würde ich die temporäre datei inputFile löschen. da ich diese ja nicht mehr brauche. jedoch funktioniert das nicht. die methode delete() liefert mir immer ein false zurück. ich habe testweise probiert den outputFile zu löschen, und da funktioniert es..

weiss hier jemand villeicht einen rat??
hat es vielleicht etwas mit dem fileChooser zu tun? muss ich den file evtl irgendwie unregistrieren?
habe keine passende methode gefunden..

würde mich über eine antwort freuen..

grüße..
 
dachte eigentlich, ich habe alle sachen geschlossen..
hier ist mal ein ausschnitt aus meinem code.

oder hat es etwas mit dem pfad zu tun?!? kann er evtl die datei nicht finden.. diese existiert doch aber..

Code:
JFileChooser fc = new JFileChooser();
int state = fc.showSaveDialog(null);

if (state == JFileChooser.APPROVE_OPTION)
{
  File inputFile = fc.getSelectedFile();

  XMLOutputFactory outputFactory = XMLOutputFactory.newInstance();
  XMLEventWriter writer = outputFactory.createXMLEventWriter(new FileOutputStream(inputFile));
  XMLEventFactory eventFactory = XMLEventFactory.newInstance();

  // xml-bearbeitung
  ...

  writer.add(endDocument);
  writer.close();

  File outputFile = new File(inputFile.getPath() + ".txt");

  BufferedReader reader = new BufferedReader(new FileReader(inputFile));
  DataOutputStream out = new DataOutputStream(new BufferedOutputStream(new FileOutputStream(outputFile)));

  while (true)
  {
    String actLine = reader.readLine();
    if (actLine == null)
    {
      break;
    }

   // file-bearbeitung
    ...

  }

  reader.close();
  out.close();

  inputFile.delete(); // => false



// System.out.println("answ3:" +outputFile.delete()); => true
}


über eine antwort würde ich mich freuen..
 
Es reicht wenn der Stream geschlossen wird, das musst du aber in einem finally-Block machen, damit der Stream in jedem Fall sicher geschlossen wird.

Unter Windoof hält das BS u.U. den Filehandle noch etwas länger fest. Versuche es mal mit einer kurzen Pause zwischen close und delete.
 
Windows ist auch das einzige System (was mir zZ bekannt ist), was dir überhaupt eine Datei blockiert die gerade offen ist 😉

In Linux kannst du sogar Dateien löschen die gerade ausgeführt werden.. (beim Mac OS gehts auch).
 
alternativ kannst auch

Code:
inputFile.deleteOnExit()

schreiben.

dann wird sie geschlossen wenn windows den stream wieder freigibt (sprich nach beenden des programms)
 
Hey,

ich sitze hier grad an einem ähnlichen Problem. Erstelle einen temporären Ordner der Bilder enthält. Habe alle Streams geschlossen, den Ordner kann ich aber trotzdem nicht löschen. Optimal wäre eigentlich deleteOnExit() aber das löscht die Datei auch nicht. Auf Dateisystemebene kann ich die Datei aber manuell sogar noch wärend der Ausführung des Programms löschen. Hat vielleicht nich jemand ne Idee woran das sonst liegen könnte (OS ist Windows). Danke schon mal!
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben