【问题标题】:Create whole path automatically when writing to a new file写入新文件时自动创建整个路径
【发布时间】:2011-02-19 12:04:18
【问题描述】:

我想用FileWriter 写一个新文件。我是这样使用的:

FileWriter newJsp = new FileWriter("C:\\user\Desktop\dir1\dir2\filename.txt");

现在 dir1dir2 目前不存在。如果它们不存在,我希望 Java 自动创建它们。实际上 Java 应该设置整个文件路径,如果不存在的话。

我怎样才能做到这一点?

【问题讨论】:

    标签: java path directory filewriter


    【解决方案1】:

    使用File.mkdirs()

    【讨论】:

    • 这将创建一个 目录 `C:\\user\Desktop\dir1\dir2\filename.txt`。
    • @MartinSchröder:仅当您保留文件名组件时。
    【解决方案2】:

    使用File.mkdirs():

    File dir = new File("C:\\user\\Desktop\\dir1\\dir2");
    dir.mkdirs();
    File file = new File(dir, "filename.txt");
    FileWriter newJsp = new FileWriter(file);
    

    【讨论】:

      【解决方案3】:

      类似:

      File file = new File("C:\\user\\Desktop\\dir1\\dir2\\filename.txt");
      file.getParentFile().mkdirs();
      FileWriter writer = new FileWriter(file);
      

      【讨论】:

      • 为什么是 getParentFile 而不仅仅是 mkdirs?
      • 如果我用不同的同级文件重新发布相同的代码,它会覆盖以前的文件夹吗?
      • @surajs1n:如果目录已经存在,mkdirs 将什么都不做。
      • @sauperl:如果该文件还不存在,mkdirs() 将假定所有指定的内容都是一个目录并创建它(刚刚测试过)。通过使用 getParentFile(),您可以将文件本身的创建留给 FileWriter
      【解决方案4】:

      使用FileUtils 处理所有这些令人头疼的问题。

      编辑:例如,使用以下代码写入文件,此方法将“检查并创建父目录,如果它不存在”。

      openOutputStream(File file [, boolean append]) 
      

      【讨论】:

      • 拜托,你能说得更具体点吗?
      • 嗨,Jean,已编辑。 FileUtils 下还有很多其他有用的方法。 OIUtils 和 FileUtils 等 Apache Commons IO 类让 Java 开发人员的生活更轻松。
      • 我同意 FileUtils 是一个好方法,但我认为更简单的方法是使用 writeStringToFile,而不是 openOutputStream。例如。文件file = new File("C:/user/Desktop/dir1/dir2/filename.txt"); FileUtils.writeStringToFile(file,"foo bar baz",true);
      • 谢谢。现在让我的代码更干净了。链接到最近的 javadoc:commons.apache.org/proper/commons-io/javadocs/api-2.5/org/…
      【解决方案5】:

      从 Java 1.7 开始,您可以使用 Files.createFile:

      Path pathToFile = Paths.get("/home/joe/foo/bar/myFile.txt");
      Files.createDirectories(pathToFile.getParent());
      Files.createFile(pathToFile);
      

      【讨论】:

      • 重要的是要记住相对路径可能会导致空指针异常。 Path pathToFile = Paths.get("myFile.txt"); Files.createDirectories(pathToFile.getParent());
      • if(!Files.exists(pathToFile.getParent())) Files.createDirectory(pathToFile.getParent()); //测试dir是否已经存在避免报错
      • @AndreNel JavaDoc of createDirectories 指出:与 createDirectory 方法不同,如果目录已存在,则无法创建时不会引发异常。
      猜你喜欢
      • 1970-01-01
      • 2012-06-06
      • 1970-01-01
      • 2019-08-07
      • 1970-01-01
      • 2011-10-29
      • 1970-01-01
      相关资源
      最近更新 更多