我有一个从 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 结合使用,并在本地计算机上进行调试测试。
最佳答案
当你做的时候
f.mkdirs();
您正在创建一个与您的文件同名的目录(也就是说,您不仅创建目录“附件”,还创建一个与附件文件名同名的子目录)。然后
f.createNewFile();
不执行任何操作,因为该文件已经存在(以您刚创建的目录的形式)。它返回 false 告诉您该文件已经存在。
然后这失败了:
FileOutputStream fos = new FileOutputStream(f);
您正在尝试打开目录上的输出流。系统不允许您在目录中写入,因此失败。
底线是:
mkdirs()
并不像您想象的那样。- 您应该检查调用
createNewFile()
的返回值。
使其工作的最简单方法是将您的行替换为:
f.getParentFile().mkdirs();
关于java - 尽管有 mkdirs() 和 createNewFile(),FileOutputStream 上的 FileNotFoundException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15204271/