尝试写入文件时出现 FileNotFound 异常

Posted

技术标签:

【中文标题】尝试写入文件时出现 FileNotFound 异常【英文标题】:FileNotFound exception when trying to write to a file 【发布时间】:2011-02-02 05:47:55 【问题描述】:

好的,我觉得这应该很容易,但显然缺少用 Java 编写文件的基本内容。我有这个:

File someFile = new File("someDirA/someDirB/someDirC/filename.txt");

我只想写入文件。然而,虽然 someDirA 存在,但 someDirB(因此 someDirC 和 filename.txt)不存在。这样做:

BufferedWriter writer = new BufferedWriter(new FileWriter(someFile));

抛出FileNotFoundException。嗯,呃,不开玩笑。毕竟我正在尝试创建它。在实例化 FileWriter 对象之前,是否需要将文件路径分解为组件、创建目录并创建文件?

【问题讨论】:

【参考方案1】:

您必须先创建所有前面的目录。 here 是怎么做的。您需要创建一个File 对象来表示您想要存在的路径,然后在其上调用.mkdirs()。然后确保你 create 新文件。

final File parent = new File("someDirA/someDirB/someDirC/");
if (!parent.mkdirs())

   System.err.println("Could not create parent directories ");

final File someFile = new File(parent, "filename.txt");
someFile.createNewFile();

【讨论】:

谢谢,但上面有一些与事实无关的内容。首先,您可以在现有目录上调用 mkdirs() ,它只会返回 false 而不是抛出异常。此外,就我而言,一旦创建了目录,我可以跳过 createNewFile() 步骤并直接进入 FileWriter 步骤。 createNewFile() 是多余的,因此不赞成。 createNewFile() 是可重复的,但其余代码工作正常。因此赞成。【参考方案2】:

您可以在 Java 中的 File 类上使用“mkdirs”方法。 mkdirs 将创建您的目录,并在必要时创建任何不存在的父目录。

http://java.sun.com/j2se/1.4.2/docs/api/java/io/File.html#mkdirs%28%29

【讨论】:

以上是关于尝试写入文件时出现 FileNotFound 异常的主要内容,如果未能解决你的问题,请参考以下文章

使用CsvHelper写入数据时出现异常

将全局声明的缓冲区写入 FLASH 时出现 STM32 Hardfault 异常

使用 pyspark 在数据块中实现 FileNotFound 异常

将数据写入 Hive Spark SQL 时出现 ArrayIndexOutOfBoundsException 异常

使用 pyspark 将数据帧写入 Kafka 时出现异常

写入事件日志时出现System.Security.SecurityException