2

我需要发送一封电子邮件以及嵌入的图像。电子邮件发送后,应立即删除应用服务器中的图像。我面临的问题是,在发送电子邮件后,控制方法包含,

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

它正在打印“条形码图像已删除”。但是,图像并没有被删除,并且仍然存在于同一位置。我正在使用 multipart 将图像附加到电子邮件中。

为什么不被删除?

4

4 回答 4

8

你在使用 javax.mail 吗?
如果是这样,您需要等到邮件发送完毕,您可以通过注册一个TransportListener来了解这一点。

这也意味着您将无法使用静态 Transport.send() 方法,但必须构建和清理您自己的会话和传输。

我正在尝试记住前一段时间的细节......我认为 DataHandler 或 DataSource 在完成阅读后不会关闭输入流,因此您需要保留对它的引用并在您之前自行关闭它可以删除底层文件。

于 2009-06-12T10:55:14.670 回答
6

File.delete方法返回一个boolean指示删除是否成功的。

可能是由于没有删除文件的权限,文件删除没有成功执行。

于 2009-06-12T10:48:32.937 回答
3

File.delete() 返回真/假条件。尝试检查删除的返回条件,看看系统是否真的报告文件已删除。

于 2009-06-12T10:47:37.823 回答
3

首先,如果 File.delete() 成功删除文件,则返回一个布尔值。检查该值并至少记录它。

如果它没有被删除,那么我猜想要么

  1. 该文件当前已打开以供阅读,并且操作系统不会让您在关闭之前将其删除。可能你的邮件软件?我的猜测是邮件软件在实际发送消息之前不会尝试对图像进行base64编码(以包含在消息中)......和/或在发送邮件之前不会停止读取它。
  2. java进程没有删除文件的权限
于 2009-06-12T10:50:06.490 回答