Java的createNewFile()方法 - 它是否也会创建目录?

97

我有一个条件语句,用于检查在继续之前是否存在某个文件(./logs/error.log)。如果找不到它,我想创建它。但是,会发生什么?

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

如果不存在,还可以创建logs/目录吗?

6个回答

208

第一步。
在创建文件之前使用tmp.getParentFile().mkdirs()方法。


哎呀!我使用了“tmp.mkdirs()”,这就是为什么我的文件被创建成文件夹的原因。 - GabrielBB

22
File theDir = new File(DirectoryPath);
if (!theDir.exists()) theDir.mkdirs();

7
我建议使用"mkdirs"代替"mkdir",这样你的代码也可以创建不存在的父文件夹 :) - Nimpo

14
File directory = new File(tmp.getParentFile().getAbsolutePath());
directory.mkdirs();

如果目录已经存在,什么也不会发生,因此你不需要进行任何检查。


10

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();
        }
    }
}

4

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


2
抱歉晚了,但现在应该是 FileUtils.touch(new File(file_path)) - shark1608

0

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

对于 Android 开发人员的有趣事实:在支持最小 API 26 的情况下,调用类似Files.createDirectories()Paths.get() 的方法是可行的。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接