java 解压缩 zip文件

package com.becom.modules.bjtsj.web;
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.ArrayList;
import java.util.Enumeration;
import java.util.List;

import java.util.zip.ZipInputStream;

import org.apache.tools.zip.ZipEntry;
import org.apache.tools.zip.ZipFile;
import org.slf4j.Logger;

/**
*
* 压缩或解压zip:
* 由于直接使用java.util.zip工具包下的类,会出现中文乱码问题,所以使用ant.jar中的org.apache.tools.zip下的工具类
*
*/
public class ZipUtil {
private static byte[] _byte = new byte[1024] ;

private static Logger log = org.slf4j.LoggerFactory.getLogger(ZipUtil.class);

/**
 * 对.zip文件进行解压缩
 * @param zipFile  解压缩文件
 * @param descDir  压缩的目标地址
 * @return
 */
public static List<File> upZipFile(File zipFile, String descDir) {
    List<File> _list = new ArrayList<>() ;
    try {
        ZipFile _zipFile = new ZipFile(zipFile , "UTF-8") ;
        for( Enumeration entries = _zipFile.getEntries() ; entries.hasMoreElements() ; ){
            ZipEntry entry = (ZipEntry)entries.nextElement() ;
            File _file = new File(descDir + File.separator + entry.getName()) ;
            if( entry.isDirectory() ){
                _file.mkdirs() ;
            }else{
                File _parent = _file.getParentFile() ;
                if( !_parent.exists() ){
                    _parent.mkdirs() ;
                }
                InputStream _in = _zipFile.getInputStream(entry);
                OutputStream _out = new FileOutputStream(_file) ;
                int len ;
                while( (len = _in.read(_byte)) > 0){
                    _out.write(_byte, 0, len);
                }
                if (null !=_out){
                    _out.flush();
                    _out.close();
                }
                if (null !=_in){
                    _in.close();
                }
                _list.add(_file);
            }
        }
        _zipFile.close();
    }catch (Exception e){
        log.error(e.getMessage());
    }
    return _list ;
}

/**
 * @param file
 * @throws Exception
 */
public static void readZipFile(String file) throws Exception {  
    java.util.zip.ZipFile zf = new java.util.zip.ZipFile(file);  
    InputStream in = new BufferedInputStream(new FileInputStream(file));  
    ZipInputStream zin = new ZipInputStream(in);  
    java.util.zip.ZipEntry ze = null;  
    while ((ze = zin.getNextEntry()) != null) {  
        if (ze.isDirectory()) {
        } else {  
            System.err.println("file - " + ze.getName() + " : "  
                    + ze.getSize() + " bytes");  
            long size = ze.getSize();  
            if (size > 0) {  
                BufferedReader br = new BufferedReader(  
                        new InputStreamReader(zf.getInputStream(ze)));  
                String line;  
                while ((line = br.readLine()) != null) {  
                    System.out.println(line);  
                }  
                br.close();  
            }  
        }  
    }  
    zin.closeEntry();  
}  

}

猜你喜欢

转载自blog.csdn.net/u011128560/article/details/82016728