如何在此代码中添加文件未找到的异常?

时间:2012-08-10 10:12:45

标签: java error-handling javamail java-io

我使用此代码使用java发送邮件。在这里我附上一个pdf文件到邮件。如果找不到文件我想抛出并找不到异常文件。如何做?

    try{
    Message message = new MimeMessage(session);
    message.setFrom(new InternetAddress(from));
    message.addRecipient(Message.RecipientType.TO, new InternetAddress(receiver));
    message.setSubject(subject);
    // Create the message part
    BodyPart messageBodyPart = new MimeBodyPart();
    // Fill the message
    messageBodyPart.setText("hai");
    Multipart multipart = new MimeMultipart();
    multipart.addBodyPart(messageBodyPart);
    //Attachement
    messageBodyPart = new MimeBodyPart();
    String filename = "file";
        DataSource source = new FileDataSource(filename);
        messageBodyPart.setDataHandler(new DataHandler(source));
        messageBodyPart.setFileName(source.getName());
        multipart.addBodyPart(messageBodyPart);
    }
    message.setContent(multipart);
    Transport transport = session.getTransport("smtp");
    try{
        transport.connect(host,from,password);
    } catch (AuthenticationFailedException err){
        String errMsg = "Authentication fails when sending mail. Sent failed to " + receiver;
        log.error(errMsg,err);
        throw new AuthenticationFailedException(errMsg + err.getMessage());
    }
    transport.send(message);
} catch (MessagingException re) {
    String localizedError = "Unexpected error occurred at Email client. Sent failed to:" + receiver + ". ";
    log.error(localizedError + re.getLocalizedMessage(), re);
    throw new MessagingException(localizedError + re.getLocalizedMessage(), re);
}

这是我想添加文件未找到异常的代码

3 个答案:

答案 0 :(得分:3)

你的意思是?

if(!new File(filename).exists()) throw new FileNotFoundException(filename);

虽然任何读取文件的函数都应该扔掉它,所以我觉得不需要添加它。

答案 1 :(得分:1)

来自FileDataSource的doc用于输入/输出流方法:

  

此方法将返回...表示数据的流和   如果不能这样做,将抛出IOException。这个方法会返回   每次调用时都是一个新的InputStream实例。

您需要处理的不仅仅是FileNotFoundException,请注意。如果您通过了目录或不可读的文件,会发生什么? IOException将封装所有这些内容。

答案 2 :(得分:0)

我原以为FileDataSource或DataHandler会这样做,但如果没有,只需添加:

new FileInputStream(filename).close();

在将filename参数传递给FileDataSource之前。 这将为你抛出这个例外。