user623990
user623990

Reputation:

Java's createNewFile() - will it also create directories?

I've got a conditional to check if a certain file exists before proceeding (./logs/error.log). If it isn't found I want to create it. However, will

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

also create logs/ if it doesn't exist?

Upvotes: 99

Views: 99301

Answers (6)

Alejandra
Alejandra

Reputation: 882

No, and if logs does not exist you'll receive java.io.IOException: No such file or directory

Fun fact for android devs: calls the likes of Files.createDirectories() and Paths.get() would work when supporting min api 26.

Upvotes: 0

ahmet
ahmet

Reputation: 1125

Java 8 Style

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

To write on file

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

To read

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

Full example

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

Upvotes: 10

Eng.Fouad
Eng.Fouad

Reputation: 117597

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

Upvotes: 22

NathanChristie
NathanChristie

Reputation: 2400

StringUtils.touch(/path/filename.ext) will now (>=1.3) also create the directory and file if they don't exist.

Upvotes: 4

jtahlborn
jtahlborn

Reputation: 53694

No.
Use tmp.getParentFile().mkdirs() before you create the file.

Upvotes: 212

Jake Roussel
Jake Roussel

Reputation: 641

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

If the directories already exist, nothing will happen, so you don't need any checks.

Upvotes: 14

Related Questions