Java 的 createNewFile() - 它还会创建目录吗?

Posted

技术标签:

【中文标题】Java 的 createNewFile() - 它还会创建目录吗?【英文标题】:Java's createNewFile() - will it also create directories? 【发布时间】:2011-10-03 17:22:33 【问题描述】:

在继续之前,我有一个条件来检查某个文件是否存在 (./logs/error.log)。如果找不到,我想创建它。不过会

File tmp = new File("logs/error.log");
tmp.createNewFile();

如果logs/不存在,还要创建它吗?

【问题讨论】:

【参考方案1】:

不,如果logs 不存在,您将收到java.io.IOException: No such file or directory

android 开发者的有趣事实:在支持 min api 26 时,调用 Files.createDirectories()Paths.get() 之类的方法会起作用。

【讨论】:

【参考方案2】:

Java 8 风格

Path path = Paths.get("logs/error.log");
Files.createDirectories(path.getParent());

写入文件

Files.write(path, "Log log".getBytes());

阅读

System.out.println(Files.readAllLines(path));

完整示例

public class CreateFolderAndWrite 

    public static void main(String[] args) 
        try 
            Path path = Paths.get("logs/error.log");
            Files.createDirectories(path.getParent());

            Files.write(path, "Log log".getBytes());

            System.out.println(Files.readAllLines(path));
         catch (IOException e) 
            e.printStackTrace();
        
    

【讨论】:

【参考方案3】:
File theDir = new File(DirectoryPath);
if (!theDir.exists()) theDir.mkdirs();

【讨论】:

我建议使用“mkdirs”而不是“mkdir”,这样您的代码也可以创建不存在的父文件夹:)【参考方案4】:

StringUtils.touch(/path/filename.ext) 现在 (>=1.3) 也会创建目录和文件(如果它们不存在)。

【讨论】:

请原谅迟到的评论,但现在应该是FileUtils.touch(new File(file_path))【参考方案5】:

没有。 在创建文件之前使用tmp.getParentFile().mkdirs()

【讨论】:

糟糕。我正在使用“tmp.mkdirs()”。这就是我的文件被创建为文件夹的原因【参考方案6】:
File directory = new File(tmp.getParentFile().getAbsolutePath());
directory.mkdirs();

如果目录已经存在,什么都不会发生,所以你不需要任何检查。

【讨论】:

以上是关于Java 的 createNewFile() - 它还会创建目录吗?的主要内容,如果未能解决你的问题,请参考以下文章

Java的createNewFile() - 它还会创建目录吗?

Java创建文件new file(string 参数)与file.createNewFile()

Java File createNewFile创建文件包含多层级目录报错

Java File createNewFile创建文件包含多层级目录报错

Java createNewFile 不能在本地网络上工作

Android的createNewFile()报错提示:java.io.IOException: No such file or directory