【问题标题】:How to add file not found exception to this code?如何在此代码中添加找不到文件的异常?
【发布时间】:2012-08-10 10:12:45
【问题描述】:

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

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

【问题讨论】:

  • 除非我在这里遗漏了一些明显的东西,否则您的代码会在尝试使用该文件但找不到它时抛出 some 异常。

标签: java error-handling jakarta-mail java-io


【解决方案1】:

你的意思是?

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

尽管任何读取文件的函数都应该抛出这个,所以我认为没有必要添加它。

【讨论】:

    【解决方案2】:

    来自FileDataSource 的文档,用于输入/输出流方法:

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

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

    【讨论】:

      【解决方案3】:

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

      new FileInputStream(filename).close();
      

      在将文件名参数传递给 FileDataSource 之前。 这将为您抛出该异常。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-04-26
        • 1970-01-01
        • 1970-01-01
        • 2021-09-30
        • 1970-01-01
        • 2021-10-11
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多