2

埋め込み画像と一緒にメールを送信する必要があります。電子メールが送信されたら、アプリケーション サーバー内の画像はすぐに削除する必要があります。私が直面している問題は、電子メールが送信された後、コントロールが次のメソッドを含むことです。

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

「バーコード画像が削除されました」と印刷されています。ただし、イメージは削除されず、同じ場所にまだ存在します。マルチパートを使用して画像をメールに添付しています。

削除されないのはなぜですか?

4

4 に答える 4

8

javax.mailを使用していますか?その場合は、メールの送信が完了するまで待つ必要があります。これについては、 TransportListener
を登録することでわかります。

これは、静的なTransport.send()メソッドを使用できないことも意味しますが、独自のセッションとトランスポートを構築してクリーンアップする必要があります。

しばらく前の詳細を思い出そうとしています...DataHandlerまたはDataSourceは、入力ストリームを読み終えたときに閉じないので、参照を保持して、自分で閉じる必要があります。基になるファイルを削除できます。

于 2009-06-12T10:55:14.670 に答える
6

このFile.deleteメソッドはboolean、削除が成功したかどうかを示すaを返します。

ファイルを削除する権限がないため、ファイルの削除が正常に実行されていない可能性があります。

于 2009-06-12T10:48:32.937 に答える
3

File.delete()はtrue/false条件を返します。削除の戻り条件をチェックして、システムが実際にファイルを削除済みとして報告しているかどうかを確認してください。

于 2009-06-12T10:47:37.823 に答える
3

まず、File.delete()は、ファイルが正常に削除された場合にブール値を返します。その値を確認し、少なくともログに記録します。

削除されていない場合は、どちらかだと思います

  1. ファイルは現在読み取り用に開いており、OSはファイルが閉じられるまでファイルを削除できません。あなたのメールソフトウェアは可能ですか?私の推測では、メールソフトウェアは、実際にメッセージを送信するまで(メッセージに含めるために)画像をbase64エンコードしようとはしません...および/またはメールが送信されるまで画像の読み取りを停止しません。
  2. Javaプロセスにはファイルを削除する権限がありません
于 2009-06-12T10:50:06.490 に答える