Изображение не удаляется, даже если вызывается метод file.delete () - PullRequest
2 голосов
/ 12 июня 2009

Мне нужно отправить электронное письмо вместе со встроенным изображением. После того, как электронное письмо было отправлено, изображение на сервере приложений должно быть немедленно удалено. Проблема, с которой я сталкиваюсь, заключается в том, что после отправки электронного письма в методе управления указывается

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

Это печать "Изображение штрих-кода удалено". Но изображение не удаляется и все еще присутствует в том же месте. Я использую multipart, чтобы прикрепить изображение к электронному письму.

Почему он не удаляется?

Ответы [ 4 ]

8 голосов
/ 12 июня 2009

Вы используете javax.mail?
Если это так, вам нужно подождать, пока не закончится отправка письма, о чем вы узнаете, зарегистрировав TransportListener .

Это также означает, что вы не сможете использовать статические методы Transport.send (), но вам придется создавать и очищать свой собственный сеанс и транспорт.

Я пытаюсь вспомнить детали давным-давно ... Я думаю, что DataHandler или DataSource не закрывают поток ввода, когда они закончили его читать, поэтому вам нужно сохранить ссылку на нее и закрыть ее самостоятельно, прежде чем вы сможете удалить базовый файл.

6 голосов
/ 12 июня 2009

Метод File.delete возвращает boolean, который указывает, было ли удаление успешным.

Возможно, удаление файла не было успешно выполнено из-за отсутствия прав на удаление файла.

3 голосов
/ 12 июня 2009

Во-первых, File.delete () возвращает логическое значение, если он успешно удаляет файл. Проверьте это значение и, по крайней мере, зарегистрируйте его.

Если он не удаляется, то я думаю, что либо

  1. файл в настоящее время открыт для чтения, и ОС не позволит вам удалить его, пока он не будет закрыт. Возможно ваше почтовое программное обеспечение? Я предполагаю, что почтовое программное обеспечение не пытается base64 кодировать изображение (для включения в сообщение) до тех пор, пока оно фактически не отправляет сообщение ... и / или не прекращает его чтение, пока не будет отправлено письмо.
  2. у процесса java нет прав на удаление файла
3 голосов
/ 12 июня 2009

File.delete () возвращает условие истина / ложь. Попробуйте проверить возвращаемое условие удаления, чтобы увидеть, действительно ли система сообщает об удаленном файле.

...