package com.mandi.servlet.file.impl;
import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.nio.charset.Charset;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.Enumeration;
import java.util.zip.CRC32;
import java.util.zip.CheckedOutputStream;
import java.util.zip.ZipEntry;
import java.util.zip.ZipFile;
import java.util.zip.ZipOutputStream;
import com.mandi.servlet.file.Zipfile;
/**
* @author mengly
* @version 创建时间:2015å¹´11月6æ—¥ 下åˆ7:00:20
* 类说明
*/
public class Zipfileimpl implements Zipfile {
private int buffersize=1024;
@Override
public File zip(String path,String dest) {
File sf=new File(path);
if(!sf.exists())
return null;
this.zip(sf, dest);
return null;
}
private void compress(File f,ZipOutputStream zos,String pathbase)
{
if(f.isDirectory())
{
File[] files = f.listFiles();
if(files.length<1)
{
ZipEntry ze=new ZipEntry(pathbase + f.getName()+ File.separator);
try {
zos.putNextEntry(ze);
zos.closeEntry();
} catch (IOException e) {
e.printStackTrace();
}
}else{
for (File file : files) {
compress(file, zos,f.getName()+ File.separator);
}
}
}else if(f.isFile()){
ZipEntry ze=new ZipEntry(pathbase + f.getName());
BufferedInputStream bis=null;
try {
zos.putNextEntry(ze);
int count;
bis=new BufferedInputStream(new FileInputStream(f));
byte data[]=new byte[buffersize];
while((count=bis.read(data, 0, buffersize))!=-1)
{
zos.write(data,0,count);
}
} catch (IOException e) {
e.printStackTrace();
}finally{
try {
bis.close();
zos.closeEntry();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
@Override
public File zip(File file,String dest) {
if(!file.exists())
return null;
ZipOutputStream zos=null;
try {
File df=new File(dest);
CheckedOutputStream cos=new CheckedOutputStream(new FileOutputStream(df), new CRC32());
zos=new ZipOutputStream(cos);
if(file.isFile())
compress(file,zos,"");
else{
File[] fs=file.listFiles();
for (File file2 : fs) {
compress(file2,zos,"");
}
}
return df;
} catch (FileNotFoundException e) {
e.printStackTrace();
}finally{
try {
zos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
return null;
}
@Override
public File unzip(String path,String dest) {
File f=new File(path);
if(!f.exists())
return null;
this.unzip(f, dest);
return null;
}
@Override
public File unzip(File file,String dest) {
File destfile=new File(dest);
if(!destfile.exists()||!destfile.isDirectory())
destfile.mkdirs();
if(!dest.endsWith(File.separator))
{
dest=dest+File.separator;
}
ZipFile zf=null;
try{
zf=new ZipFile(file,Charset.forName(System.getProperty("sun.jnu.encoding")));
Enumeration<ZipEntry> enums=(Enumeration<ZipEntry>) zf.entries();
while(enums.hasMoreElements())
{
ZipEntry zee=enums.nextElement();
if(zee.isDirectory())
{
String entryname=zee.getName();
String tempname=dest+entryname.substring(0,entryname.length()-1);
File f = new File(tempname);
if (!f.exists()||!f.isDirectory())
f.mkdirs();
}else{
Files.copy(zf.getInputStream(zee), Paths.get(dest+zee.getName()));
}
}
}catch(Exception e){
e.printStackTrace();
}finally{
try {
zf.close();
} catch (IOException e) {
e.printStackTrace();
}
}
return null;
}
}