Srinivas
Srinivas

Reputation: 1736

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

Am downloading a zip file from web. It contain folders and files. Uncompressing them using ZipInputstream and ZipEntry. Zipentry.getName gives the name of file as htm/css/aaa.htm.

So I am creating new File(zipentry.getName);

But problem it is throwing an exception: File not found. I got that it is creating subfolders htm and css.

My question is: how to create a file including its sub directories, by passing above path?

Upvotes: 59

Views: 70555

Answers (7)

Piroman
Piroman

Reputation: 21

Try this

Path path = Paths.get("your path");
Files.createDirectories(path.getParent());
Files.createFile(path);

Upvotes: 1

Sean Patrick Floyd
Sean Patrick Floyd

Reputation: 299048

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:

Upvotes: 124

Vadim Zverev
Vadim Zverev

Reputation: 508

Java NIO API Files.createDirectories

import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;

Path path = Paths.get("/folder1/folder2/folder3");
Files.createDirectories(path);

Upvotes: 7

parag.rane
parag.rane

Reputation: 137

Looks at the file you use the .mkdirs() method on a File object: http://www.roseindia.net/java/beginners/java-create-directory.shtml

        isDirectoryCreated = (new File("../path_for_Directory/Directory_Name")).mkdirs();
        if (!isDirectoryCreated) 
        {
            // Directory creation failed
        }

Upvotes: 1

Gubatron
Gubatron

Reputation: 6479

This is how I do it

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

Upvotes: 1

Andrejs
Andrejs

Reputation: 27707

You can use Google's 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/

Upvotes: 14

dogbane
dogbane

Reputation: 274758

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 
    }
}

Upvotes: 2

Related Questions