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


85

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

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

还创建logs/它是否不存在?

Answers:


188

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


哎呀。我正在使用“ tmp.mkdirs()”。这就是为什么将我的文件创建为文件夹的原因
GabrielBB

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

6
我建议使用“ mkdirs”代替“ mkdirs”,以便您的代码还可以创建不存在的父文件夹:)
Nimpo

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

如果目录已经存在,则不会发生任何事情,因此您无需进行任何检查。


8

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

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


1
请原谅最近的评论,但现在应该是FileUtils.touch(new File(file_path))
shark1608

0

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

对于Android开发人员来说,有趣的事实是:只要支持min api 26 Files.createDirectories()Paths.get()就可以调用和一样赞。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.