Подтвердить что ты не робот

Как создать файл - включая папки - для заданного пути?

Загрузка zip файла из Интернета. Он содержит папки и файлы. Разжатие их с помощью ZipInputstream и ZipEntry. Zipentry.getName указывает имя файла как htm/css/aaa.htm.

Итак, я создаю новый File(zipentry.getName);

Но проблема бросает исключение: File not found. Я понял, что он создает подпапки htm и css.

Мой вопрос: как создать файл, в том числе его подкаталоги, путем прохождения выше пути?

4b9b3361

Ответ 1

Используйте это:

File targetFile = new File("foo/bar/phleem.css");
File parent = targetFile.getParentFile();
if (!parent.exists() && !parent.mkdirs()) {
    throw new IllegalStateException("Couldn't create dir: " + parent);
}

Пока вы можете просто сделать file.getParentFile().mkdirs(), не проверив результат, он считает лучшей практикой проверить возвращаемое значение операции. Следовательно, сначала проверяйте существующий каталог, а затем проверяйте успешное создание (если оно еще не существует).

Справка:

Ответ 2

Вы можете использовать Google библиотека сделать это в нескольких строках с помощью Files класса:

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

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

Ответ 3

Вам нужно создать подкаталоги, если необходимо, при прокрутке записей в 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 
    }
}

Ответ 4

Просматривает файл, который вы используете метод .mkdirs() для объекта File: http://www.roseindia.net/java/beginners/java-create-directory.shtml  

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

Ответ 5

Вот как я это делаю

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