如何为给定路径创建文件(包括文件夹)?

问题描述 投票:0回答:7

我正在从网上下载一个 zip 文件。它包含文件夹和文件。使用

ZipInputstream
ZipEntry
解压它们。
Zipentry.getName
将文件名指定为
htm/css/aaa.htm

所以我正在创建新的

File(zipentry.getName);

但问题是抛出异常:

File not found
。我发现它正在创建子文件夹
htm
css

我的问题是:如何通过传递上面的路径来创建一个包含其子目录的文件?

java android file
7个回答
124
投票

使用这个:

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
。检查其稳健性。

参考:


14
投票

您可以使用 Google 的 库通过 Files 类在几行内完成此操作:

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

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


7
投票

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);


2
投票

当您循环浏览 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 
    }
}

1
投票

我就是这样做的

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

1
投票

查看您在

.mkdirs()
对象上使用
File
方法的文件: http://www.roseindia.net/java/beginners/java-create-directory.shtml

 isDirectoryCreated = (new File("../path_for_Directory/Directory_Name")).mkdirs();
        if (!isDirectoryCreated) 
        {
            // 目录创建失败
        }


0
投票

试试这个

Path path = Paths.get("your path");
Files.createDirectories(path.getParent());
Files.createFile(path);
© www.soinside.com 2019 - 2024. All rights reserved.