2013-02-01 78 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

相關問題