java zip util_springboot 中 java.util.zip 文件的压缩

packagecom.geotmt.billingcenter.common.utils;importorg.datanucleus.util.StringUtils;importorg.slf4j.Logger;importorg.slf4j.LoggerFactory;import java.io.*;importjava.util.zip.CRC32;importjava.util.zip.CheckedOutputStream;importjava.util.zip.ZipEntry;importjava.util.zip.ZipOutputStream;/*** @Description 压缩与解压工具

* @Author yanghanwei

* @Date 18:42 2019-11-20

* @Version v1

**/

public classZipUtils {private static final Logger logger = LoggerFactory.getLogger(ZipUtils.class);/*** 压缩 zip

*@paramfilePath 文件夹 全路径

*@paramfileName 文件夹名称

*@paramoutPath 压缩文件保存路径*/

public static voidzipFile(String filePath, String fileName, String outPath) {

logger.info("filePath:{}, fileName:{}, outPath:{}", filePath, fileName, outPath);try{//创建Test.zip文件

OutputStream is = newFileOutputStream(outPath);//检查输出流,采用CRC32算法,保证文件的一致性

CheckedOutputStream cos = new CheckedOutputStream(is, newCRC32());//创建zip文件的输出流

ZipOutputStream zos = newZipOutputStream(cos);//需要压缩的文件或文件夹对象

File file = newFile(filePath);//压缩文件的具体实现函数

zipFilePost(zos,file,filePath,fileName,outPath);

zos.close();

cos.close();

is.close();

System.out.println("压缩完成");

}catch(Exception e) {

logger.error("压缩失败zipFile,Exception:" +e);

}

}/*** 压缩文件

*@paramzos zip文件的输出流

*@paramfile 需要压缩的文件或文件夹对象

*@paramfilePath 压缩的文件路径

*@paramfileName 需要压缩的文件夹名

*@paramoutPath 缩完成后保存为Test.zip文件*/

private static voidzipFilePost(ZipOutputStream zos, File file, String filePath, String fileName, String outPath){try{

String path=file.getPath();

String zosName= "";if(!StringUtils.isEmpty(path)){

zosName=path.substring(path.indexOf(fileName));

}

File[] files=file.listFiles();if(file.isDirectory() && files != null && files.length > 0) {//创建压缩文件的目录结构

zos.putNextEntry(new ZipEntry(zosName +File.separator));for(File f : files) {

zipFilePost(zos, f, filePath, fileName, outPath);

}

}else{

logger.info("正在压缩文件:{}",file.getName());//创建压缩文件

zos.putNextEntry(newZipEntry(zosName));//用字节方式读取源文件

InputStream is = newFileInputStream(file.getPath());//创建一个缓存区

BufferedInputStream bis = newBufferedInputStream(is);//字节数组,每次读取1024个字节

byte [] b = new byte[1024];//循环读取,边读边写

while(bis.read(b)!=-1) {//写入压缩文件

zos.write(b);

}//关闭流

bis.close();

is.close();

}

}catch(Exception e) {

logger.error("压缩文件失败zipFilePost,Exception:" +e);

}

}public static void main(String[] args) throwsException{

String filePath= "/var/folders/88/jh37h0fj59l1f302jdryz4780000gn/T/201908月小微平台消耗-1574300435525/";//需要压缩的文件夹名

String fileName = "201908月小微平台消耗-1574300435525";//压缩完成后保存为Test.zip文件,名字随意

String outPath = "/var/folders/88/jh37h0fj59l1f302jdryz4780000gn/T/Test3.zip";

zipFile(filePath, fileName, outPath);

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值