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();
}
}