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