即使调用file.delete()方法,图像也不会被删除

时间:2009-06-12 10:44:07

标签: java email file-io attachment

我需要发送一封电子邮件和一张嵌入式图片。电子邮件发送后,应立即删除应用程序服务器中的映像。我面临的问题是,在发送电子邮件之后,控件将包含

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

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

为什么不删除?

4 个答案:

答案 0 :(得分:8)

您使用的是javax.mail吗? 如果是这样,您需要等到邮件发送完毕,您可以通过注册TransportListener找到该邮件。

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

我正在尝试记住前一段时间的细节......我认为DataHandler或DataSource在读完输入流后不会关闭它,所以你需要保留对它的引用并关闭它在您删除基础文件之前自己。

答案 1 :(得分:6)

File.delete方法返回boolean,表示删除是否成功。

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

答案 2 :(得分:3)

File.delete()返回true / false条件。尝试检查删除的返回条件,以查看系统是否实际将文件报告为已删除。

答案 3 :(得分:3)

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

如果没有删除,那么我猜是

  1. 该文件当前已打开以供阅读,操作系统不会让您删除它直到它关闭。可能你的邮件软件?我的猜测是,邮件软件不会尝试对图像进行base64编码(包含在邮件中),直到它实际发送邮件...和/或在邮件发送之前不会停止阅读。
  2. java进程无权删除文件