2012-08-28 66 views
0

我使用下面的代碼解壓一個.fsd文件,但它顯示了異常:解壓文件.fsd

java.util.zip.ZipException: Central Directory Entry not found 

我的代碼是:

public void unzipFolder(String zipfile_name,String unzipfolder_name){ 
    System.out.println("zip file nme----"+zipfile_name); 

    try { 
     ZipFile zf = new ZipFile(zipfile_name); 
     System.out.println("zip file size----"+zf.size()); 
     Enumeration< ? extends ZipEntry> zipEnum = zf.entries(); 
     String dir = unzipfolder_name; 

     while(zipEnum.hasMoreElements()) { 
     ZipEntry item = (ZipEntry) zipEnum.nextElement(); 

     if (item.isDirectory()) { 
     File newdir = new File(dir + File.separator + item.getName()); 
     newdir.mkdir(); 
     } else { 
     String newfilePath = dir + File.separator + item.getName(); 
     File newFile = new File(newfilePath); 
     if (!newFile.getParentFile().exists()) { 
     newFile.getParentFile().mkdirs(); 
     } 
     copyInputStream(zf.getInputStream(item), 
        new BufferedOutputStream(new FileOutputStream(newfilePath))); 

     } 
     } 
     zf.close(); 
     } catch (Exception e) { 
     e.printStackTrace(); 
     } 
} 


public static final void copyInputStream(InputStream in, OutputStream out) { 
    byte[] buffer = new byte[1024]; 
    int len; 
    try { 
     while((len = in.read(buffer)) >= 0){ 
      out.write(buffer, 0, len); 
     } 
     in.close(); 
     out.close(); 
    } catch (IOException e) { 
     System.err.println("Zip -> copyInputStream : "+e.getMessage()); 
    } 
} 

這裏zipfile_name=/mnt/sdcard/forside_bookshelf_download/P160225200007046510000718MASenC.fsdunzipfolder_name=/mnt/sdcard/

我有以下行上述異常:

ZipFile zf = new ZipFile(zipfile_name); 

任何人可以幫助我嗎?

回答

0

我曾經用zip4j解決過這個問題。 當我在zipfile中添加一個主文件夾並將所有其他內容放在那裏時,它已經解決了。

+0

謝謝jelle的回覆,請你清楚說明你是如何解壓的。 – user1498549

+0

zipfile中的結構如下所示:file.zip/data/filetoUnzip.png 'final ZipFile zipFile = new ZipFile(path); final FileHeader fileHeader = zipFile.getFileHeader(「data/fileToUnzip.png」);' 然後使用'zipFile.getInputStream(fileHeader)'將它們寫入另一個輸出流。 – Jelle