Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to create a file -- including folders -- for a given path?

Tags:

java

file

android

People also ask

How do you create a file on a specific path in Linux?

You can either click the Terminal icon in the Apps menu, or press Ctrl + Alt + T at the same time to open the Terminal. Navigate to the directory you want to create a file in. To do so, type cd followed by the path to the directory you want to create a file in and press Enter..

What is the path of a folder?

A path is a slash-separated list of directory names followed by either a directory name or a file name. A directory is the same as a folder.


Use this:

File targetFile = new File("foo/bar/phleem.css");
File parent = targetFile.getParentFile();
if (parent != null && !parent.exists() && !parent.mkdirs()) {
    throw new IllegalStateException("Couldn't create dir: " + parent);
}

While you can just do file.getParentFile().mkdirs() without checking the result, it's considered a best practice to check for the return value of the operation. Hence the check for an existing directory first and then the check for successful creation (if it didn't exist yet).

Also, if the path doesn't include any parent directory, parent would be null. Check it for robustness.

Reference:

  • File.getParentFile()
  • File.exists()
  • File.mkdir()
  • File.mkdirs()

You can use Google's guava library to do it in a couple of lines with Files class:

Files.createParentDirs(file);
Files.touch(file);

https://code.google.com/p/guava-libraries/


You need to create subdirectories if necessary, as you loop through the entries in the zip file.

ZipFile zipFile = new ZipFile(myZipFile);
Enumeration e = zipFile.entries();
while(e.hasMoreElements()){
    ZipEntry entry = (ZipEntry)e.nextElement();
    File destinationFilePath = new File(entry.getName());
    destinationFilePath.getParentFile().mkdirs();
    if(!entry.isDirectory()){
        //code to uncompress the file 
    }
}

This is how I do it

static void ensureFoldersExist(File folder) {
    if (!folder.exists()) {
        if (!folder.mkdirs()) {
            ensureFoldersExist(folder.getParentFile());
        }
    }
}