1

免責事項として、私はすでにこの投稿とそれにリンクしている投稿を見てきました。

アーカイブされたファイルであるサーバーでホストされているファイルがあり、この方法を使用してアーカイブを解除しようとしています。ファイルがデバイスに事前にダウンロードされていて、アプリケーションでそれを開いて解凍すると、intent-filterfromを介してDownloads問題はありません。ただし、アプリケーション内のサーバーからダウンロードして解凍しようとすると、次の行のタイトルにエラーが表示されます。

ZipFile zipfile = new ZipFile(archive);

archiveは、ダウンロードしたアーカイブFileファイルを指しています。アーカイブをダウンロードするために使用しているコードは次のとおりです。

    String urlPath = parameters[0], localPath = parameters[1];

    try
    {
        URL url = new URL(urlPath);
        URLConnection connection = url.openConnection();
        connection.addRequestProperty("Accept-Encoding", "gzip");
        connection.connect();

        int fileLength = connection.getContentLength();

        InputStream input = new BufferedInputStream(url.openStream());
        OutputStream output = new BufferedOutputStream(new FileOutputStream(localPath));

        byte data[] = new byte[1024];
        long total = 0;
        int count;

        while((count = input.read(data)) != -1)
        {
            total += count;
            publishProgress((int)total * 100 / fileLength);
            output.write(data);
        }

        output.flush();
        output.close();
        input.close();

一番上で参照した投稿に従って、最近エンコーディングタイプを追加しましたが、それでも同じエラーが発生します。どんな助けでも素晴らしいでしょう。

明確にするために:

  • アーカイブファイルがあります
  • ファイルが外部からダウンロードされ、アプリ内で開かれたりアーカイブ解除されたりすると、正常にアーカイブ解除されます
  • アーカイブダウンロードして解凍しようとすると、エラーが表示されますjava.util.zip.ZipException: Central Directory Entry not found

私の推測では、これは私のダウンロードに問題があるということです。しかし、そうは言っても、私は自分が間違っていることを知りません。

4

1 に答える 1

5

ダウンロードを正しくコピーしていません。使用する必要があります

output.write(data, 0, count);

そうしないと、任意の迷惑メールがファイルに書き込まれます。

于 2013-02-01T23:33:25.327 に答える