我正在从网络下载一个zip文件,其中包含文件夹和文件。使用 ZipInputstream
和 ZipEntry
对它们进行解压缩。 Zipentry.getName
会将文件名显示为 htm/css/aaa.htm
。
所以我创建了一个新的 File(zipentry.getName);
但问题是它抛出了一个异常:文件未找到
。我知道这是因为它正在创建子文件夹htm
和css
。
我的问题是:如何通过传递上述路径来创建其子目录中的文件?
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);
}
file.getParentFile().mkdirs()
而不检查结果,但最佳做法是检查操作的返回值。因此,首先检查现有目录,然后检查成功创建(如果尚不存在)。parent
将为null
。请进行健壮性检查。
参考资料:
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);
在遍历Zip文件中的条目时,如果有必要,您需要创建子目录。
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
}
}
if(!entry.isDirectory())
块内创建文件夹,因为你已经创建了所有必需的父文件夹,所以当 entry 是一个目录时就没有必要创建。 - Sean Patrick Floyd查看你使用.mkdirs()
方法在File
对象上的文件:http://www.roseindia.net/java/beginners/java-create-directory.shtml
isDirectoryCreated = (new File("../path_for_Directory/Directory_Name")).mkdirs(); if (!isDirectoryCreated) { // 目录创建失败 }
这就是我做的方式
static void ensureFoldersExist(File folder) {
if (!folder.exists()) {
if (!folder.mkdirs()) {
ensureFoldersExist(folder.getParentFile());
}
}
}
mkdirs
而不是mkDirs
。小写的 'd'。 - dogbane