代码如下:
一、打包过程:
所需要jar包:安装上Java环境就可以了
package filetozip;
import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;
public class FilesToZip {
public boolean fileToZips(String sourceFilePath,String zipFilePath,String zipFileName) throws Exception{
boolean flag=false;
BufferedInputStream bis=null;
ZipOutputStream zos=null;
File sourceFiles = new File(sourceFilePath);
if(sourceFiles.exists()==false){
System.out.println("待压缩目录"+sourceFiles+"不存在...");
}else{
//判断待压缩文件是否已经被压缩过 zipFiles--->fos--->zos设置压缩包名称
File zipFiles = new File(zipFilePath+"//"+zipFileName+".zip");
if(zipFiles.exists()){
System.out.println(zipFilePath+"目录下已经存在"+zipFileName+".zip"+"压缩包...");
}else {
//得到指定目录下的所有文件夹,注意返回的File数组,不是String数组
File[] sourceFileList = sourceFiles.listFiles();
if(null==sourceFileList||sourceFileList.length<1){
System.out.println(sourceFilePath+"目录下没有待压缩的文件...");
}else {
FileOutputStream fos = new FileOutputStream(zipFiles);
zos = new ZipOutputStream(fos);
byte[] bys=new byte[1024*10];
for(int i=0;i<sourceFileList.length;i++){
//fileName:指定目录下的文件夹的名称或文件的名称
String fileName = sourceFileList[i].getName();
//创建zip实体,并添加进压缩包 ,zipEntry的值就是fileName的值
ZipEntry zipEntry = new ZipEntry(sourceFileList[i].getName());
//添加进压缩包
zos.putNextEntry(zipEntry);
//读取待压缩文件,并添加进压缩包,FileInputStream读的是一个具体文件,不是一个文件夹
FileInputStream fis = new FileInputStream(sourceFileList[i]);
//如果遇到bis存储空间不够,可以把1024*10的限制取消。
bis = new BufferedInputStream(fis, 1024*10);
//记录当前读取的字节数
int reads=0;
while((reads=bis.read(bys, 0, 1024*10))!=-1){
zos.write(bys, 0, reads);
}
}
flag=true;
//特别注意,如果不关闭流端口,可能会导致压缩打包不成功!
if(null!=bis){
bis.close();
}
if(null!=zos){
zos.close();
}
}
}
}
return flag;
}
}
二、测试:
package filetozip;
public class TestMian {
public static void main(String[] args) throws Exception {
FilesToZip ftz = new FilesToZip();
//待打包文件所在的目录
String sourceFilePath="D://test//0000//000//001";
//打好的压缩包存放的位置
String zipFilePath="D://test//zipRes";
//压缩包的名称
String zipFileName="2017-05-28";
boolean result = ftz.fileToZips(sourceFilePath, zipFilePath, zipFileName);
if(result){
System.out.println("压缩完成...");
}else {
System.out.println("压缩失败...");
}
}
}