繁体   English   中英

如何添加文件找不到此代码的例外?

[英]How to add file not found exception to this code?

我使用此代码使用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);
}

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

你的意思是?

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

虽然我有任何读取文件的函数都应该抛出该异常,所以我看不到需要添加它。

FileDataSource的文档中获取输入/输出流方法:

此方法将返回表示数据的... Stream,如果不能这样做,则将抛出IOException。 该方法将在每次调用时返回一个InputStream的新实例。

注意,您需要处理的不仅仅是FileNotFoundException 如果传递目录或不可读的文件怎么办? IOException将封装所有这些。

我本以为FileDataSource或DataHandler都可以做到这一点,但如果没有,只需添加:

new FileInputStream(filename).close();

在将filename参数传递给FileDataSource之前。 它将为您抛出该异常。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM