2011-09-19 95 views
3

嗨有從窗口7創建並把在server.Now我下載從服務器上的文件到我的SD card.but當我開始將它解壓縮顯示錯誤,安卓:解壓縮下載文件

java.util.zip.ZipException: EOCD not found; not a Zip archive? 

的代碼,我使用瞭解壓是

private void unzipEntry(ZipFile zipfile, ZipEntry entry, 
       String outputDir) throws IOException { 


      if (entry.isDirectory()) { 
       createDir(new File(outputDir, entry.getName())); 
       return; 
      } 

      File outputFile = new File(outputDir, entry.getName()); 
      if (!outputFile.getParentFile().exists()) { 
       createDir(outputFile.getParentFile()); 
      } 

      log("Extracting: " + entry); 
      BufferedInputStream inputStream = new BufferedInputStream(
        zipfile.getInputStream(entry)); 
      BufferedOutputStream outputStream = new BufferedOutputStream(
        new FileOutputStream(outputFile)); 

      try { 
       IOUtils.copy(inputStream, outputStream); 
      } catch (InterruptedException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } finally { 
       outputStream.close(); 
       inputStream.close(); 
      } 
     } 

但是,當我的文件直接導入到DDMS它的工作文件。

任何人都可以知道如何解決這個問題,那麼請幫助我。

謝謝。

+0

嗨,我發現,我下載不工作完美,感謝您的支持 –

回答

2
FileInputStream fin = new FileInputStream(
       zipfile); 
     ZipInputStream zin = new ZipInputStream(fin); 
     ZipEntry ze = null; 
     while ((ze = zin.getNextEntry()) != null) { 

      FileOutputStream fout = new FileOutputStream(
        unzippath 
          + ze.getName()); 
      for (int c = zin.read(); c != -1; c = zin.read()) { 
       fout.write(c); 
      } 

      zin.closeEntry(); 
      fout.close(); 

     } 
     zin.close(); 

給出的ZipInputStream例子試試這個。這將解決你的問題,我猜。

+0

您好,我發現,雖然((ZE = zin.getNextEntry())!= NULL)..返回null如此不進入while循環可以請告訴代碼 –

+0

有什麼問題,確保「zipfile」指向包含zip文件的正確路徑。使用日誌跟蹤它.. – Nemo

+0

可以請給我代碼我使用從SD卡,文件文件= new File(Environment.getExternalStorageDirectory() // \t \t \t \t \t \t +「/images/"+DownloadService.IMAGE_ZIP); –

0
import java.io.BufferedInputStream; 
import java.io.BufferedReader; 
import java.io.File; 
import java.io.FileInputStream; 
import java.io.FileOutputStream; 
import java.io.IOException; 
import java.io.InputStream; 
import java.io.InputStreamReader; 
import java.io.OutputStream; 
import java.util.zip.ZipEntry; 
import java.util.zip.ZipInputStream; 

public class ZipUtil { 

    public static void unzip(File archive, File path) throws IOException{ 
    ZipInputStream zip = null; 
    String fileName = null; 
    try{ 
     if(!path.exists()){ 
     path.mkdirs(); 
     } 
     zip = new ZipInputStream(new FileInputStream(archive)); 
     ZipEntry zipEntry; 
     while((zipEntry=zip.getNextEntry()) != null) { 
     fileName = zipEntry.getName(); 
     final File outputFile = new File(path, fileName); 
     writeToStream(new BufferedInputStream(zip), new FileOutputStream(outputFile), false); 
     zip.closeEntry(); 
     } 
     zip.close(); 
     zip = null; 
    }finally{ 
     if(zip != null){ 
     try{ zip.close(); } catch(Exception e){} 
     } 
    } 
    } 
    public static void writeToStream(InputStream in , OutputStream out, boolean closeOnExit) throws IOException 
    { 
    byte[] bytes = new byte[2048]; 
    for (int c = in.read(bytes); c != -1; c = in.read(bytes)) { 
     out.write(bytes,0, c); 
    } 
    if(closeOnExit){ 
     in.close(); 
     out.close(); 
    } 
    } 
    public static String writeToString(InputStream stream) throws java.io.IOException{ 
     StringBuffer fileData = new StringBuffer(1000); 
     BufferedReader reader = new BufferedReader(new InputStreamReader(stream,"utf-8")); 
     char[] buf = new char[1024]; 
     int numRead=0; 
     while((numRead=reader.read(buf)) != -1){ 
      String readData = String.valueOf(buf, 0, numRead); 
      fileData.append(readData); 
      buf = new char[1024]; 
     } 
     reader.close(); 
     return fileData.toString(); 
    } 
}