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