zip与unzip

来源:互联网 发布:macos mysql 安装 编辑:程序博客网 时间:2024/06/05 15:20

大家在用java做zip压缩解压缩时,java提供了原生的zip类

Java代码  收藏代码
  1. import java.util.zip.CRC32;  
  2. import java.util.zip.CheckedOutputStream;  
  3. import java.util.zip.ZipEntry;  
  4. import java.util.zip.ZipInputStream;  
  5. import java.util.zip.ZipOutputStream;  

 

但是实际应用中是,我们有两个问题

1.中文路径压缩解压缩问题,我网上找了找方案,都是要改源类库,如果有不用的请赐教

2.是我在实际应用中发现的,

Java代码  收藏代码
  1. unziping resultFile\resultFile1.txt  
  2. d:\resultFile\resultFile1.txt  
  3. f:d:\resultFile\resultFile1.txt  
  4. <span style="color: #ff0000;">java.util.zip.ZipException: invalid entry compressed size (expected 4294967295 but got 7 bytes)</span>  
  5.     at java.util.zip.ZipInputStream.readEnd(ZipInputStream.java:391)  
  6.     at java.util.zip.ZipInputStream.read(ZipInputStream.java:156)  
  7.     at java.util.zip.InflaterInputStream.read(InflaterInputStream.java:105)  
  8.     at TestZip.unzip(TestZip.java:55)  
  9.     at TestZip.main(TestZip.java:93)  

 原因不明,但我估计和压缩的版本有关,zip来源是我同学用c#压缩的东西,试了很多种方法基于java原生zip的方法都不行,后来尝试了commons-compress-1.1.jar,apache的开源类库(话说很多java原生的类库比起apache的工具类都差好多),解压缩实现如下,是改了网上某人的,他的方法有点问题

Java代码  收藏代码
  1. public static void decompress(String srcFile, String destPath) {   
  2.         try {    
  3.             File outFile = new File(destPath);   
  4.             if (!outFile.exists()) {      
  5.                 outFile.mkdirs();     
  6.             }     
  7.             ZipFile zipFile = new ZipFile(srcFile);   
  8.             Enumeration<?> en = zipFile.getEntries();   
  9.             ZipArchiveEntry zipEntry = null;    
  10.             while (en.hasMoreElements()) {     
  11.                 zipEntry = (ZipArchiveEntry) en.nextElement();   
  12.                 if (zipEntry.isDirectory()) {     
  13.         // mkdir directory     
  14.         String dirName = zipEntry.getName();     
  15.         dirName = dirName.substring(0, dirName.length() - 1);     
  16.         File f = new File(outFile.getPath() + "/" + dirName);    
  17.         f.mkdirs();      
  18.         }  
  19.                 else {      
  20.         // unzip file     
  21.         File f = new File(outFile.getPath() + "/" + zipEntry.getName());  
  22.         <span style="color: #ff0000;">if(!f.getParentFile().exists()){  
  23.             f.getParentFile().mkdirs();  
  24.         }</span>  
  25.         f.createNewFile();   
  26.         InputStream in = zipFile.getInputStream(zipEntry);     
  27.         OutputStream out = new FileOutputStream(f);     
  28.         IOUtils.copy(in, out);      
  29.         out.close();    
  30.         in.close();    }   }   
  31.             zipFile.close();  }  
  32.         catch (Exception e)  
  33.         {   e.printStackTrace();   
  34.         }   
  35.         }  

 红字是我加的,使用无非是

Java代码  收藏代码
  1. decompress("d:\\resultFile.zip","e:\\1",);  

 附件是我找的commons-compress-1.1.jar

  • commons-compress-1.1.jar (157.6 KB)
  • 描述: apache的压缩解压缩开源jar
  • 下载次数: 85
原文
0 0