Разархивируйте папку в Android с подпапками

Во-первых, я много раз гуглил и искал огромное количество страниц Stackoverflow, но ничего не могу заставить работать. Что я пытаюсь сделать, так это то, что у меня есть zip-файл со структурой вроде:

zipfile.zip

Папка

Подпапка1

Подпапка с пробелами (около 100, но их количество неизвестно)

Подпапка с пробелами

Несколько файлов

SubSubFolderWithoutSpaces

Еще несколько файлов

Подпапка2

Подпапка с пробелами (около 100, но их количество неизвестно)

Подпапка с пробелами

Несколько файлов

SubSubFolderWithoutSpaces

Еще несколько файлов

Подпапка3

Подпапка с пробелами (около 100, но их количество неизвестно)

Подпапка с пробелами

Несколько файлов

SubSubFolderWithoutSpaces

Еще несколько файлов

Подпапка4

Подпапка с пробелами (около 100, но их количество неизвестно)

Подпапка с пробелами

Несколько файлов

SubSubFolderWithoutSpaces

Еще несколько файлов

В настоящее время я использую код из http://www.jondev.net/articles/Unzipping_Files_with_Android_%28Programmatically%29 попытаться разархивировать файл, но все, что он делает, это создает каталог с именем, например, zipfile, а затем имеет в нем подкаталог с именем folder, в котором нет ничего внутри каталога, чего, очевидно, не должно происходить.

Любая помощь приветствуется.

ОБНОВЛЕНИЕ: О, и если вам интересно, у меня есть WRITE_EXTERNAL_STORAGE_PERMISSION.


person NStorm    schedule 30.06.2012    source источник


Ответы (1)


Я надеюсь, что это поможет вам:

private boolean unzipPack(InputStream stream) {
    FileOutputStream out;
    byte buf[] = new byte[16384];
    try {
        ZipInputStream zis = new ZipInputStream(stream);
        ZipEntry entry = zis.getNextEntry();
        while (entry != null) {
            if (entry.isDirectory()) {
                File newDir = new File(rootDirectory + entry.getName());
                newDir.mkdir();
            } else {
                String name = entry.getName();
                File outputFile = new File(rootDirectory + name);
                String outputPath = outputFile.getCanonicalPath();
                name = outputPath
                .substring(outputPath.lastIndexOf("/") + 1);
                outputPath = outputPath.substring(0, outputPath
                .lastIndexOf("/"));
                File outputDir = new File(outputPath);
                outputDir.mkdirs();
                outputFile = new File(outputPath, name);
                outputFile.createNewFile();
                out = new FileOutputStream(outputFile);

                int numread = 0;
                do {
                    numread = zis.read(buf);
                    if (numread <= 0) {
                        break;
                    } else {
                        out.write(buf, 0, numread);
                    }
                } while (true);
                out.close();
            }
            entry = zis.getNextEntry();
        }
        return true;
    } catch (IOException e) {
        e.printStackTrace();
        return false;
    }
}      

Ссылка:
android pico installer source

person hasanghaforian    schedule 30.06.2012
comment
@NStorm В чем твоя проблема? - person hasanghaforian; 11.07.2012