我正在从网上下载一个 zip 文件。它包含文件夹和文件。使用
ZipInputstream
和 ZipEntry
解压它们。 Zipentry.getName
将文件名指定为 htm/css/aaa.htm
。
所以我正在创建新的
File(zipentry.getName);
但问题是抛出异常:
File not found
。我发现它正在创建子文件夹 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
}
}
我就是这样做的
static void ensureFoldersExist(File folder) {
if (!folder.exists()) {
if (!folder.mkdirs()) {
ensureFoldersExist(folder.getParentFile());
}
}
}
查看您在
.mkdirs()
对象上使用 File
方法的文件: http://www.roseindia.net/java/beginners/java-create-directory.shtml
isDirectoryCreated = (new File("../path_for_Directory/Directory_Name")).mkdirs(); if (!isDirectoryCreated) { // 目录创建失败 }
试试这个
Path path = Paths.get("your path");
Files.createDirectories(path.getParent());
Files.createFile(path);