2009-06-12 4 views
2

포함 된 이미지와 함께 전자 메일을 보내야합니다. 전자 메일을 보내면 응용 프로그램 서버의 이미지를 즉시 삭제해야합니다. 내가 직면하고있어 문제는 이메일을 보낸 후, 컨트롤이 포함 방법,file.delete() 메서드가 호출 되더라도 이미지가 삭제되지 않음

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

그것의 인쇄 "바코드 이미지 삭제"를 진행한다. 그러나 이미지는 삭제되지 않고 같은 위치에 계속 나타납니다. 멀티 파트를 사용하여 이미지를 이메일에 첨부합니다.

왜 삭제되지 않습니까?

답변

3

File.delete()는 true/false 조건을 반환합니다. 삭제의 리턴 조건을 점검하여 시스템이 실제로 파일을 삭제 된 것으로보고하는지 확인하십시오.

+0

메일에 포함 된 이미지 파일을 삭제하지 않겠습니까? –

+0

안녕하세요 .. if/else 블록에 넣음으로써 검사했습니다 .. 사실 만 반환하고 이미지는 삭제되지 않습니다 .... –

6

File.delete 메서드는 삭제 성공 여부를 나타내는 boolean을 반환합니다.

파일을 삭제할 권한이 없기 때문에 파일 삭제가 성공적으로 수행되지 않았을 수 있습니다.

3

첫 번째로 File.delete()는 파일을 성공적으로 삭제하면 부울을 반환합니다. 값을 확인하고 적어도 기록하십시오.

이 삭제되지 않으면, 나도

  1. 파일을 읽고 OS가 닫을 때까지 당신이 그것을 삭제하지 않습니다 현재 열려 있음을 추측한다. 가능한 메일 소프트웨어가 있습니까? 내 생각 엔 메일 소프트웨어는 실제로 메시지를 보낼 때까지 (메시지에 포함시키기 위해) 이미지를 base64로 인코딩하려고 시도하지 않는다. 그리고/또는 메일이 보내질 때까지 읽는 것을 멈추지 않는다.
  2. 자바 프로세스는 파일
+0

1. 메일에 포함 된 이미지 파일을 삭제하지 않겠습니까? 2. 이미지를 삭제할 수 있으며 이전에는 이미지를 삭제할 수 없습니다. –

+0

메일 작성 전에 Java 코드가 이미지를 삭제할 수 없으면 '사용 권한'문제를 추측 할 수 있습니다. 자바 코드가 (이미지가있는) 메일을 보낸 후 즉시 * 이미지를 지우려고한다면 메일 소프트웨어가 여전히 이미지를 사용하고있는 것 같습니다. 어떻게 메일을 보냅니 까? –

+0

예. 나는 Transport.send (msg) 바로 뒤에 파일 삭제 코드를 주었다. 나는 안된다. ??? –

8

당신이 javax.mail을 사용하고 삭제할 수있는 권한이 없습니다?
그렇다면 TransportListener을 등록하여 메일 발송이 완료 될 때까지 기다려야합니다.

이것은 정적 Transport.send() 메소드를 사용할 수 없지만 고유 한 세션 및 전송을 구성하고 정리해야한다는 것을 의미합니다.

얼마 전부터 세부 사항을 기억하려고합니다. DataHandler 또는 DataSource가 입력 스트림을 읽은 후에 닫는다고 생각합니다. 따라서 참조를 유지하고 닫아야합니다. 기본 파일을 삭제하기 전에 직접 확인하십시오.

+0

예. 파일 삭제 코드를 Transport.Send (메시지) 바로 뒤에 지정했습니다. i는 –

+1

이 아니어야합니다. Transport.send()가 아닐 수도 있으므로 백그라운드에서 무언가가 일어나기 전에 send()가 호출 된 후 시간이 걸릴 수 있으므로 TransportListener 콜백이 필요한 이유입니다. – skaffman

관련 문제