还是个问题? - java.util.zip.ZipException:找不到中央目录条目

时间:2013-02-01 21:56:20

标签: java android encoding archive

作为免责声明,我已经看过this帖子和帖子链接到它。

我有一个托管在服务器上的文件是n归档文件,我试图使用this方法取消归档它。当文件预先下载到设备并且我在我的应用程序中打开并取消归档文件时,通过intent-filter中的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

我最好的猜测是我的下载存在问题。然而,话虽这么说,我不知道自己做错了什么。

1 个答案:

答案 0 :(得分:5)

您没有正确复制下载。你必须使用

output.write(data, 0, count);

否则,您正在将任意垃圾写入文件。