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

JavaFileIoDirectory

Java Problem Overview


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?

Java Solutions


Solution 1 - Java

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

Solution 2 - Java

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

Solution 3 - Java

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

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

Solution 4 - Java

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

Solution 5 - Java

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

Solution 6 - Java

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.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
Questionuser623990View Question on Stackoverflow
Solution 1 - JavajtahlbornView Answer on Stackoverflow
Solution 2 - JavaEng.FouadView Answer on Stackoverflow
Solution 3 - JavaJake RousselView Answer on Stackoverflow
Solution 4 - JavaahmetView Answer on Stackoverflow
Solution 5 - JavaNathanChristieView Answer on Stackoverflow
Solution 6 - JavaAlejandraView Answer on Stackoverflow