2013-02-01 33 views
1

作为免责声明,我已经看到this帖子和链接到它的帖子。仍然是问题? - java.util.zip.ZipException:找不到中央目录条目

我有一个文件托管在一个服务器上,这是一个归档文件,我试图用this方法解压它。当文件被预先下载到设备上时,我打开并在我的应用程序中取消存档,通过Downloadsintent-filter,没有任何问题。然而,当我从我的应用程序中的服务器下载它,然后尝试将它解压缩,我得到的标题错误在这条线:

ZipFile zipfile = new ZipFile(archive); 

archiveFile指向存档文件我下载。我使用它来下载档案的代码如下:

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(); 

我最近添加了编码类型,每个我在上面提到的职位,但我仍然得到同样的错误。任何帮助都会很棒。

只是为了澄清:

  • 我有一个存档文件
  • 当文件被外部下载和打开/未归档我的应用程序
  • 里面当下载档案,然后将其解档细试图unarchive它,我收到错误java.util.zip.ZipException: Central Directory Entry not found

我最好的猜测是,这是一个问题,米y下载。然而,这就是说,我不知道我做错了什么。

回答

4

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

output.write(data, 0, count); 

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

+0

真的吗?该文档说'写(缓冲区)'是'相当于写(缓冲区,0,buffer.length).' – RileyE

+0

@RileyE当然它是,但都不等于我发布的代码。你需要去阅读read()的文档。 – EJP

+0

哦对。我注意到它没有读完整字节的大小。我不知道我怎么没有听到。好点子。谢谢你,先生! – RileyE

相关问题