2009-06-12 2 views
2

Ich muss eine E-Mail zusammen mit einem eingebetteten Bild senden. Sobald die E-Mail gesendet wurde, sollte das Bild auf dem Anwendungsserver sofort gelöscht werden. Das Problem, das ich bin Bewurf ist, nachdem die E-Mail gesendet wird, wobei das Steuerverfahren geht, die enthält,Bild nicht gelöscht, auch wenn file.delete() -Methode heißt

File file = new File("../bar.jpeg") 
if(file.exists()){ 
    file.delete(); 
    System.out.println("Barcode Image Deleted"); 
} 

Es ist Druck „Barcode Bild gelöscht“. Das Bild wird jedoch nicht gelöscht und ist immer noch am selben Ort vorhanden. Ich verwende multipart, um das Bild an die E-Mail anzuhängen.

Warum wird es nicht gelöscht?

Antwort

3

File.delete() gibt eine Wahr/Falsch-Bedingung zurück. Versuchen Sie, die Rückgabebedingung von delete zu überprüfen, um festzustellen, ob das System die Datei tatsächlich als gelöscht meldet.

+0

Es löscht nicht die Bilddatei, die in Mail eingebettet wurde? –

+0

Hallo .. Ich habe überprüft, indem es in if/else blockieren .. Es gibt nur wahr und Bild nicht gelöscht werden .... –

6

Die Methode File.delete gibt eine boolean zurück, die angibt, ob das Löschen erfolgreich war.

Es könnte sein, dass die Dateilöschung nicht erfolgreich ausgeführt wird, da die Datei nicht gelöscht werden kann.

3

Zunächst gibt File.delete() einen booleschen Wert zurück, wenn eine Datei erfolgreich gelöscht wurde. Überprüfen Sie diesen Wert und protokollieren Sie ihn mindestens.

Wenn es nicht gelöscht wird, dann würde ich vermuten, dass entweder

  1. die Datei geöffnet ist für das Lesen und das Betriebssystem werden Sie es nicht zulassen, löschen, bis es geschlossen ist. Möglich Ihre Mail-Software? Meine Vermutung ist, dass die Mail-Software nicht versucht, das Bild zu codieren (für die Aufnahme in die Nachricht), bis es tatsächlich die Nachricht sendet ... und/oder es hört nicht auf, es zu lesen, bis die Mail gesendet wird.
  2. der Java-Prozess keine Berechtigungen die Datei
+0

1. Es löscht nicht die Bilddatei, die in Mail eingebettet wurde? 2. Ich kann das Bild vorher löschen und jetzt lösche ich es nicht !!! –

+0

Wenn Ihr Java-Code das Bild nicht löschen kann, bevor die Mail erstellt wurde, könnte ich ein Problem mit Berechtigungen erkennen. Wenn Ihr Java-Code versucht, das Bild * sofort * nach dem Senden der E-Mail (mit Bild darin) zu löschen, dann würde ich vermuten, dass die E-Mail-Software immer noch das Bild verwendet. Wie versenden Sie die Post? –

+0

Ja. Ich habe Datei löschen Code direkt nach Transport.send (msg); Sollte ich nicht ??? –

8

Sind Sie javax.mail mit löschen?
Wenn dies der Fall ist, müssen Sie warten, bis die E-Mail versandt wurde, was Sie durch die Registrierung einer TransportListener erfahren.

Dies bedeutet auch, dass Sie die statischen Transport.send() - Methoden nicht verwenden können, aber Ihre eigene Sitzung und den Transport erstellen und bereinigen müssen.

Ich versuche, Details aus einer Weile zu erinnern ... Ich denke, dass der DataHandler oder DataSource den Eingabestream nicht schließen, wenn sie es gelesen haben, also müssen Sie einen Verweis darauf behalten und schließen Sie selbst, bevor Sie die zugrunde liegende Datei löschen können.

+0

Ja. Ich habe Datei löschen Code direkt nach Transport.send (msg); Sollte nicht ich ??? –

+1

Nicht unbedingt, weil Transport.send() möglicherweise nicht Es kann einige Zeit dauern, bis send() aufgerufen wird, bevor etwas im Hintergrund passiert, weshalb Sie den TransportListener-Callback benötigen. – skaffman

Verwandte Themen