java压缩下载_java 打包压缩包下载文件

packagecom.talebase.cloud.cas.util.zip;importlombok.extern.log4j.Log4j2;import java.io.*;importjava.util.zip.ZipEntry;importjava.util.zip.ZipOutputStream;/*** 文件压缩工具类*/@Log4j2public classZipCompress {private String zipFileName; //目的地Zip文件

private String sourceFileName; //源文件(带压缩的文件或文件夹)

publicZipCompress(String zipFileName, String sourceFileName) {this.zipFileName =zipFileName;this.sourceFileName =sourceFileName;

}public void zip() throwsException {//File zipFile = new File(zipFileName);

log.info("开始压缩中...");long begin =System.currentTimeMillis();//创建zip输出流

File zipFile = newFile(zipFileName);if (!zipFile.exists()) {

zipFile.createNewFile();

}

ZipOutputStream out= new ZipOutputStream(newFileOutputStream(zipFileName));//创建缓冲输出流

BufferedOutputStream bos = newBufferedOutputStream(out);

File sourceFile= newFile(sourceFileName);//调用函数

compress(out, bos, sourceFile, sourceFile.getName());

bos.close();

out.close();long currentTimeMillis =System.currentTimeMillis();

log.info(zipFileName+ "压缩完成(100%)....." + (currentTimeMillis - begin) + "ms");

}public void zipNoDirectory() throwsException {//File zipFile = new File(zipFileName);

log.info("开始压缩中...");long begin =System.currentTimeMillis();//创建zip输出流

ZipOutputStream out = new ZipOutputStream(newFileOutputStream(zipFileName));//创建缓冲输出流

BufferedOutputStream bos = newBufferedOutputStream(out);

File sourceFile= newFile(sourceFileName);if(sourceFile.isDirectory()) {

File[] flist=sourceFile.listFiles();for (int i = 0; i < flist.length; i++) {

compress(out, bos, flist[i], flist[i].getName());

}

}//调用函数//compress(out,bos,sourceFile,sourceFile.getName());

bos.close();

out.close();long currentTimeMillis =System.currentTimeMillis();

log.info(zipFileName+ "压缩完成(100%)....." + (currentTimeMillis - begin) + "ms");

}public void compress(ZipOutputStream out, BufferedOutputStream bos, File sourceFile, String base) throwsException {//如果路径为目录(文件夹)

if(sourceFile.isDirectory()) {//取出文件夹中的文件(或子文件夹)

File[] flist =sourceFile.listFiles();if (flist.length == 0) {//如果文件夹为空,则只需在目的地zip文件中写入一个目录进入点//System.out.println("空:******"+base+"/");

out.putNextEntry(new ZipEntry(base +File.separator));

}else {//如果文件夹不为空,则递归调用compress,文件夹中的每一个文件(或文件夹)进行压缩

for (int i = 0; i < flist.length; i++) {

compress(out, bos, flist[i], base+ "/" +flist[i].getName());

}

}

}else {//如果不是目录(文件夹),即为文件,则先写入目录进入点,之后将文件写入zip文件中

out.putNextEntry(newZipEntry(base));

FileInputStream fos= newFileInputStream(sourceFile);

BufferedInputStream bis= newBufferedInputStream(fos);inttag;//System.out.println(base);//将源文件写入到zip文件中

while ((tag = bis.read()) != -1) {

bos.write(tag);

}

bos.flush();

bis.close();

fos.close();

}

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值