2

まず、これを何度もグーグルで検索し、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などのディレクトリを作成し、その中にサブディレクトリを作成するだけです。ディレクトリ内に何も存在しないフォルダと呼ばれますが、明らかに発生してはなりません。

どんな助けでも大歓迎です。

更新:ああ、あなたが疑問に思っている場合に備えて、私はWRITE_EXTERNAL_STORAGE_PERMISSIONを持っています。

4

1 に答える 1

5

これがお役に立てば幸いです:

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

于 2012-06-30T04:40:23.473 に答える