【问题标题】:Image not deleted even if file.delete() method is called即使调用 file.delete() 方法也不会删除图像
【发布时间】:2010-11-02 10:21:08
【问题描述】:

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

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

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

为什么没有被删除?

【问题讨论】:

    标签: java email file-io attachment


    【解决方案1】:

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

    【讨论】:

    • 邮件中嵌入的图片文件不会删除吗?
    • 嗨..我已经通过将它放在 if/else 块中进行检查..它只返回 true 并且图像不会被删除....
    【解决方案2】:

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

    可能是因为没有删除文件的权限,导致文件删除没有成功。

    【讨论】:

      【解决方案3】:

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

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

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

      【讨论】:

      • 1.它不会删除嵌入在邮件中的图像文件吗? 2. 以前可以删图,现在只删不删!!!
      • 如果您的 Java 代码在创建邮件之前无法删除图像,我可能会猜到“权限”问题。如果您的 Java 代码在发送邮件(其中包含图像)后尝试立即删除图像,那么我猜邮件软件仍在使用该图像。你是如何发送邮件的?
      • 是的。我在 Transport.send(msg); 之后给出了文件删除代码;我不应该吗???
      • 那是你的问题!您需要等到消息实际发送到 SMPT 服务器。
      • 如何让我的控制器等到那个?还有一件事,我在 if 条件下给出了“file.delete()”,它进入了 true 块。我不知道为什么!!!!
      【解决方案4】:

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

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

      我正在尝试记住前一段时间的详细信息...我认为 DataHandler 或 DataSource 在完成读取后不会关闭输入流,因此您需要保留对它的引用并关闭它删除基础文件之前,请自己动手。

      【讨论】:

      • 是的。我在 Transport.send(msg); 之后给出了文件删除代码;我不应该吗???
      • 不一定,因为 Transport.send() 可能不是同步的。在后台发生某些事情之前调用 send() 后可能需要一些时间,这就是您需要 TransportListener 回调的原因。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-09
      • 1970-01-01
      • 2014-02-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多