用ant包实现zip文件解压的类

来源:互联网 发布:hadoop传统数据数仓 编辑:程序博客网 时间:2024/05/18 17:03

 

    前一阵做东西的时候需要一个解zip的实现,开始只知道ant包的zip子包实现了对中文路径名的支持,感觉其他应该和util包中的zip子包没什么区别,但真写起来还是有点别扭的,毕竟它没有提供ZipInputStream类,因此只好用getEtries获得枚举类型的实体集,它的缺点就在于其破坏了实体间的级联关系,因此处理起来没有util.zip包方便了。

   代码有点东拼西凑的成分,就算是转贴吧,呵呵!!!

import java.io.*;
import java.util.*;
import org.apache.tools.zip.ZipEntry;
import org.apache.tools.zip.ZipFile;

public class Unzip {
  
//zipFileName为需要解压的zip文件,extPlace为解压后文件的存放路径,两者均须已经存在
  public static void extZipFileList(String zipFileName, String extPlace) throws
      Exception 
{
    ZipFile zipFile 
= new ZipFile(zipFileName);
    Enumeration e 
= zipFile.getEntries();
    ZipEntry zipEntry 
= null;
    
while (e.hasMoreElements()) {
      zipEntry 
= (ZipEntry) e.nextElement();
      String entryName 
= zipEntry.getName();
      String names[] 
= entryName.split("/");
      
int length = names.length;
      String path 
= extPlace;
      
for (int v = 0; v < length; v++{
        
if (v < length - 1{
          path 
+= names[v] + "/";
          
new File(path).mkdir();
        }

        
else // 最后一个
          if (entryName.endsWith("/")) // 为目录,则创建文件夹
            new File(extPlace + entryName).mkdir();
          }

          
else {
            InputStream in 
= zipFile.getInputStream(zipEntry);
            OutputStream os 
= new FileOutputStream(new File(extPlace +
                entryName));
            
byte[] buf = new byte[1024];
            
int len;
            
while ( (len = in.read(buf)) > 0{
              os.write(buf, 
0, len);
            }

            in.close();
            os.close();
          }

        }

      }

    }

    zipFile.close();
  }

}

原创粉丝点击