1000字范文,内容丰富有趣,学习的好帮手!
1000字范文 > Java实战案例:将文件或者文件夹压缩成zip的工具类

Java实战案例:将文件或者文件夹压缩成zip的工具类

时间:2023-05-02 03:29:45

相关推荐

Java实战案例:将文件或者文件夹压缩成zip的工具类

Java|java教程

Java zip的工具类

Java-java教程

这个工具类的功能为:

课程销售源码,vscode如何搜索关键词,ubuntu 网卡休眠,tomcat自动加载配置,python爬虫提速,php 常见算法,南沙区创新seo优化咨询热线,英文网站源码下载lzw

(1)可以压缩文件,也可以压缩文件夹

微信编辑器php源码下载,vscode如何左右分屏,ubuntu卸载恢复,本地tomcat端口配置,爬虫笔记,php 数组增加数组,seo的基础优化营销,好看云在线网站模板下载,网页 留言板 模板lzw

(2)同时支持压缩多级文件夹,工具内部做了递归处理

图片源码资源,ubuntu下载速度查看,用命令行查看tomcat,爬虫带参数,php需要学习哪些技术,seo首页没了lzw

(3)碰到空的文件夹,也可以压缩

(4)可以选择是否保留原来的目录结构,如果不保留,所有文件跑压缩包根目录去了,且空文件夹直接舍弃。注意:如果不保留文件原来目录结构,在碰到文件名相同的文件时,会压缩失败。

(5)代码中提供了2个压缩文件的方法,一个的输入参数为文件夹路径,一个为文件列表,可根据实际需求选择方法。

package com.tax.core.util; 2import java.io.File;3import java.io.FileInputStream;4import java.io.FileOutputStream;5import java.io.IOException;6import java.io.OutputStream;7import java.util.ArrayList;8import java.util.List;9import java.util.zip.ZipEntry;10import java.util.zip.ZipOutputStream;1112/**13 * ZipUtils14 * @author ZENG.XIAO.YAN15 * @date 11月19日 下午7:16:0816 * @version v1.017 */18public class ZipUtils {19 20 private static final int BUFFER_SIZE = 2 * 1024;21 22 /**23* 压缩成ZIP 方法124* @param srcDir 压缩文件夹路径 25* @param out 压缩文件输出流26* @param KeepDirStructure 是否保留原来的目录结构,true:保留目录结构; 27*false:所有文件跑到压缩包根目录下(注意:不保留目录结构可能会出现同名文件,会压缩失败)28* @throws RuntimeException 压缩失败会抛出运行时异常29*/30 public static void toZip(String srcDir, OutputStream out, boolean KeepDirStructure)31 throws RuntimeException{32 33 long start = System.currentTimeMillis();34 ZipOutputStream zos = null ;35 try {36 zos = new ZipOutputStream(out);37 File sourceFile = new File(srcDir);38 compress(sourceFile,zos,sourceFile.getName(),KeepDirStructure);39 long end = System.currentTimeMillis();40 System.out.println("压缩完成,耗时:" + (end - start) +" ms");41 } catch (Exception e) {42 throw new RuntimeException("zip error from ZipUtils",e);43 }finally{44 if(zos != null){45try {46 zos.close();47} catch (IOException e) {48 e.printStackTrace();49}50 }51 }52 53 }54 55 /**56* 压缩成ZIP 方法257* @param srcFiles 需要压缩的文件列表58* @param out 压缩文件输出流59* @throws RuntimeException 压缩失败会抛出运行时异常60*/61 public static void toZip(List srcFiles , OutputStream out)throws RuntimeException {62 long start = System.currentTimeMillis();63 ZipOutputStream zos = null ;64 try {65 zos = new ZipOutputStream(out);66 for (File srcFile : srcFiles) {67byte[] buf = new byte[BUFFER_SIZE];68zos.putNextEntry(new ZipEntry(srcFile.getName()));69int len;70FileInputStream in = new FileInputStream(srcFile);71while ((len = in.read(buf)) != -1){72 zos.write(buf, 0, len);73}74zos.closeEntry();75in.close();76 }77 long end = System.currentTimeMillis();78 System.out.println("压缩完成,耗时:" + (end - start) +" ms");79 } catch (Exception e) {80 throw new RuntimeException("zip error from ZipUtils",e);81 }finally{82 if(zos != null){83try {84 zos.close();85} catch (IOException e) {86 e.printStackTrace();87}88 }89 }90 }91 92 93 /**94* 递归压缩方法95* @param sourceFile 源文件96* @param zos zip输出流97* @param name 压缩后的名称98* @param KeepDirStructure 是否保留原来的目录结构,true:保留目录结构; 99*false:所有文件跑到压缩包根目录下(注意:不保留目录结构可能会出现同名文件,会压缩失败)100* @throws Exception101*/102 private static void compress(File sourceFile, ZipOutputStream zos, String name,103 boolean KeepDirStructure) throws Exception{104 byte[] buf = new byte[BUFFER_SIZE];105 if(sourceFile.isFile()){106 // 向zip输出流中添加一个zip实体,构造器中name为zip实体的文件的名字107 zos.putNextEntry(new ZipEntry(name));108 // copy文件到zip输出流中109 int len;110 FileInputStream in = new FileInputStream(sourceFile);111 while ((len = in.read(buf)) != -1){112zos.write(buf, 0, len);113 }114 // Complete the entry115 zos.closeEntry();116 in.close();117 } else {118 File[] listFiles = sourceFile.listFiles();119 if(listFiles == null || listFiles.length == 0){120// 需要保留原来的文件结构时,需要对空文件夹进行处理121if(KeepDirStructure){122 // 空文件夹的处理123 zos.putNextEntry(new ZipEntry(name + "/"));124 // 没有文件,不需要文件的copy125 zos.closeEntry();126}127128 }else {129for (File file : listFiles) {130 // 判断是否需要保留原来的文件结构131 if (KeepDirStructure) {132 // 注意:file.getName()前面需要带上父文件夹的名字加一斜杠,133 // 不然最后压缩包中就不能保留原来的文件结构,即:所有文件都跑到压缩包根目录下了134 compress(file, zos, name + "/" + file.getName(),KeepDirStructure);135 } else {136 compress(file, zos, file.getName(),KeepDirStructure);137 }138 139}140 }141 }142 }143 144 public static void main(String[] args) throws Exception {145 /** 测试压缩方法1 */146 FileOutputStream fos1 = new FileOutputStream(new File("c:/mytest01.zip"));147 ZipUtils.toZip("D:/log", fos1,true);148 149 /** 测试压缩方法2 */150 List fileList = new ArrayList();151 fileList.add(new File("D:/Java/jdk1.7.0_45_64bit/bin/jar.exe"));152 fileList.add(new File("D:/Java/jdk1.7.0_45_64bit/bin/java.exe"));153 FileOutputStream fos2 = new FileOutputStream(new File("c:/mytest02.zip"));154 ZipUtils.toZip(fileList, fos2);155 }156}

相关文章:

将文件夹压缩成zip文件的php代码

php代码 将文件夹压缩成zip文件的php代码

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。