package com.joyplus.test;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;/**
* @author
* 将文件中所有文件及文件夹压缩
* source: 文件源的路径
* dest: 压缩文件存放路径*/
public classzipFiletest1 {//获取文件源中的所有文件
private List getSourceAllFiles(String from){
List fileList=new ArrayList<>();
File fromfile=new File(from);
File[] fileArr=fromfile.listFiles();for(File file : fileArr) {if(file.isFile()){
fileList.add(file);
}else{//利用递归之法,获取路径中子路径中的所有文件
fileList.addAll(getSourceAllFiles(file.getPath()));
}
}returnfileList;
}//得到文件在文件夹中的相对路径 保持原有结构 (也可以根据需求自己创建新的结构)
private String getRelName(String from,File f){
String name=null;
name=f.getAbsolutePath().replace(from+"\\", "");
name=name.replace("\\", "/");
System.out.println("文件相对路径是:"+name);returnname;
}//创建一个压缩文件,并存放到新的路径中
public void createZipFile(String from,String dest){
List fileList=getSourceAllFiles(from);
ZipOutputStream zout=null; //生成Zip输出流
try{
zout=new ZipOutputStream(new FileOutputStream(newFile(dest)));//将每个文件放入Zip流中
for(File f : fileList) {
InputStreamis=newFileInputStream(f);
String name=getRelName(from, f); //获取文件相对路径 保持文件原有结构
ZipEntry en=new ZipEntry(new File(from).getName()+"/"+name);
// ZipEntry ens=new ZipEntry(f.getName()); //这样只是把单独的文件压缩,不再有之前的结构
en.setSize(f.length());
zout.putNextEntry(en);
zout.setComment("test");//读取文件中的内容
int len=0;byte[] buffer=new byte[1024];while((len=is.read(buffer))!=-1){
zout.write(buffer,0,len);
}
zout.flush();is.close();
}
zout.close();
}catch(FileNotFoundException e) {
e.printStackTrace();
}catch(IOException e) {//TODO Auto-generated catch block
e.printStackTrace();
}finally{if(zout!=null){try{
zout.close();
}catch(IOException e) {
e.printStackTrace();
}
}
}
}public static voidmain(String[] args) {
zipFiletest1 test=newzipFiletest1();
test.createZipFile("D:\\EDI_MULIT_DOWNLOAD\\5fd0998a07c84d9d924076f64fb726a7", "D:\\sumZip\\co.zip");
}
}