需求:将文件压缩到zip
package com.ls.fostation.utils;
import java.io.*;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;
/**
* @ClassName => ZipUtil
* @Description => TODO
* @about=>yangjianzhi-version1.0-2019/4/15
**/
public class ZipUtil {
// 目的地Zip文件
private String zipFileName;
//源文件(带压缩的文件或文件夹)
private String sourceFileName;
//构造函数
public ZipUtil(String zipFileName,String sourceFileName)
{
this.zipFileName=zipFileName;
this.sourceFileName=sourceFileName;
}
/**
* @Description: 开始压缩
* @Param: []
* @return: void
* @about=>yangjianzhi-version1.0-2019/4/15
*/
public void zip() throws Exception
{
//FileRecord zipFile = new FileRecord(zipFileName);
System.out.println("压缩中...");
//创建zip输出流
File newFile = new File(zipFileName);
if(!newFile.exists()){
newFile.getParentFile().mkdirs();
}else{
newFile.deleteOnExit();
newFile.getParentFile().mkdirs();
}
ZipOutputStream out = new ZipOutputStream( new FileOutputStream(zipFileName));
//创建缓冲输出流
BufferedOutputStream bos = new BufferedOutputStream(out);
File sourceFile = new File(sourceFileName);
//调用函数
compress(out,bos,sourceFile,sourceFile.getName());
bos.close();
out.close();
System.out.println("压缩完成");
}
/**
* @Description: 压缩
* @Param: [out zip压缩输出流, bos 缓存输出流, sourceFile 源文件夹, base 文件夹名]
* @return: void
* @about=>yangjianzhi-version1.0-2019/4/15
*/
public void compress(ZipOutputStream out,BufferedOutputStream bos,File sourceFile,String base) throws Exception
{
//如果路径为目录(文件夹)
if(sourceFile.isDirectory())
{
//取出文件夹中的文件(或子文件夹)
File[] flist = sourceFile.listFiles();
//如果文件夹为空,则只需在目的地zip文件中写入一个目录进入点
if(flist.length==0)
{
System.out.println(base+"/");
out.putNextEntry( new ZipEntry(base+"/") );
}
else
{
//如果文件夹不为空,则递归调用compress,文件夹中的每一个文件(或文件夹)进行压缩
for(int i=0;i<flist.length;i++)
{
compress(out,bos,flist[i],base+"/"+flist[i].getName());
}
}
}
else
{
//如果不是目录(文件夹),即为文件,则先写入目录进入点,之后将文件写入zip文件中
out.putNextEntry( new ZipEntry(base) );
FileInputStream fos = new FileInputStream(sourceFile);
BufferedInputStream bis = new BufferedInputStream(fos);
int tag;
System.out.println(base);
//将源文件写入到zip文件中
while((tag=bis.read())!=-1)
{
out.write(tag);
}
bis.close();
fos.close();
}
}
}