java - 尽管有 mkdirs() 和 createNewFile(),FileOutputStream 上的 FileNotFoundException

标签 java file

我有一个从 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/

相关文章:

java - 如何删除目录中上传的相同文件?

java - 如何以适用于 Gnome 和 KDE 的方式在 Java Swing 中启动网站

java - itext7 - 将现有 PDF 中的内容添加到新 PDF

java - 如何在 fragment Android中获取PackageManager

javascript - 使用 JavaScript 或 jQuery 拆分文件

python - 在 pandas 中读取文本文件,分隔符作为换行符 (\n),行终止符作为两个换行符 (\n\n)

java - 如何使 Spring 的 @Autowired 在 JUnit 5 扩展中工作?

java -/ArrayList 的文件写入问题

根据 R 中的选择标准从目录中读取选定的文件

Java-从文件读取并通过数据转换初始化对象