Reputation: 1736
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
Reputation: 21
Try this
Path path = Paths.get("your path");
Files.createDirectories(path.getParent());
Files.createFile(path);
Upvotes: 1
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
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
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
Reputation: 6479
This is how I do it
static void ensureFoldersExist(File folder) {
if (!folder.exists()) {
if (!folder.mkdirs()) {
ensureFoldersExist(folder.getParentFile());
}
}
}
Upvotes: 1
Reputation: 27707
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/
Upvotes: 14
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