1

我有一个从 SMTP 服务器下载电子邮件的 bean。阅读电子邮件后,它会将附件保存在服务器上。要阅读附件,我使用以下代码:

File f = new File("\\attachments\\" + attachment.getFileName());
f.mkdirs();
f.createNewFile();
FileOutputStream fos = new FileOutputStream(f);
fos.write(bytes);
fos.close();

我在创建 FileOutputStream 时遇到了 FileNotFoundException,但我不明白为什么。如果可以提供帮助,我将 NetBeans 与 GlassFish 一起使用,并且测试是在本地机器上调试的。

4

1 回答 1

6

当你这样做

f.mkdirs();

您正在使用您的文件名创建一个目录(也就是说,您不仅创建目录“附件”,还创建一个带有附件文件名的子目录)。然后

f.createNewFile();

由于文件已经存在(以您刚刚创建的目录的形式),因此不执行任何操作。它返回 false 告诉您该文件已经存在。

然后这失败了:

FileOutputStream fos = new FileOutputStream(f);

您正在尝试在目录上打开输出流。系统不允许你在目录中写入,所以它失败了。

底线是:

  • mkdirs()不做你认为它做的事。
  • 您应该检查调用的返回值createNewFile()

使其工作的最简单方法是将您的行替换为:

f.getParentFile().mkdirs();
于 2013-03-04T14:55:00.437 回答