压缩解压过程还是用IO流对文件的读写操作

本质还是对API的引用,代码逻辑比较简单,相关注释比较详细,请在代码中查看

代码已跑通,可自行copy测试

注:1. 在压缩文件时,传入的压缩文件路径必须是以.zip结尾的文件,否则会压缩失败

2. 解压时,在创建文件的时候注意不要将文件名也作为文件夹创建,否则会报错,原因及正确代码已贴在文章末尾

工具类

package com.lx.ZipUtils;import java.io.*;
import java.util.ArrayList;
import java.util.Enumeration;
import java.util.List;
import java.util.zip.ZipEntry;
import java.util.zip.ZipFile;
import java.util.zip.ZipOutputStream;public class ZipUtils {//压缩文件public static void createZip(String baseDir , String zipName) throws Exception {File baseFile = new File(baseDir);if (baseFile.exists()){List<File> baseFileList = getSubFiles(baseFile);//压缩文件名及全路径zipName,以.zip结尾,创建输出流,后续文件写入该zip文件ZipOutputStream zipOutputStream = new ZipOutputStream(new FileOutputStream(zipName));ZipEntry zipEntry = null;byte[] buf = new byte[1024];int readLen = 0;String a = "";//遍历所有文件并读取,写到zipOutputStream中for (File file : baseFileList) {//创建ZipEntry//System.out.println(getFileName(baseDir,file)+"   "+baseDir+"   "+file);zipEntry = new ZipEntry(getAbsFileName(baseDir,file));//创建ZipEntry对象,参数为各文件在源文件的相对路径(在压缩文件中保留)//zipEntry = new ZipEntry(file.getName());//直接压缩,不保留原相对路径zipEntry.setSize(file.length());//设置文件大小zipEntry.setTime(file.lastModified());//读取文件的最后修改时间,作为压缩文件中文件的修改时间//将ZipEntry放到ZipOutputStream中(ZipEntry相当于在压缩文件中创建对应文件的空间,后续将读取的内容写到该位置)zipOutputStream.putNextEntry(zipEntry);/*BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(file),"utf-8"));//纯文本文件外会乱码while((a = reader.readLine())!=null){zipOutputStream.write(a.getBytes());}reader.close();*/BufferedInputStream inputStream = new BufferedInputStream(new FileInputStream(file));while((readLen = inputStream.read(buf,0,1024))!=-1){zipOutputStream.write(buf,0,readLen);}inputStream.close();}zipOutputStream.close();}else {throw new Exception("文件夹不存在");}}//解压文件public static void releaseZip(String sourceZip , String outFileName) throws IOException {ZipFile zipFile = new ZipFile(sourceZip);Enumeration<? extends ZipEntry> zipList = zipFile.entries();ZipEntry zipEntry = null;int readLen = 0;byte[] buf = new byte[1024];while(zipList.hasMoreElements()){zipEntry = zipList.nextElement();if (zipEntry.isDirectory()){continue;}BufferedInputStream bis = new BufferedInputStream(zipFile.getInputStream(zipEntry));System.out.println(zipEntry.getName());System.out.println(getRealFile(outFileName, zipEntry.getName()));BufferedOutputStream bos =new BufferedOutputStream(new FileOutputStream(getRealFile(outFileName, zipEntry.getName())));while ((readLen = bis.read(buf,0,1024))!=-1){bos.write(buf,0,readLen);}bos.close();bis.close();}}//遍历给定文件夹中的所有文件public static List<File> getSubFiles(File baseFile){List<File> baseFileList = new ArrayList<>();File[] files = baseFile.listFiles();for (int i = 0; i < files.length; i++) {//是目录,加入baseFileListif (files[i].isFile()){baseFileList.add(files[i]);}//是文件,递归if (files[i].isDirectory()){baseFileList.addAll(getSubFiles(files[i]));}}return baseFileList;}//给定根目录及文件全路径,返回相对路径作为压缩文件中的路径public static String getAbsFileName(String baseDir, File realFile){File file = realFile;File baseFile = new File(baseDir);String fileName = file.getName();while(true){file = file.getParentFile();if (file == null){break;}if (file.equals(baseFile)){break;}else {fileName = file.getName()+"/"+fileName;}}return fileName;}//根据压缩文件中的路径生成文件夹public static File getRealFile(String outFileName , String absFileName){String[] split = absFileName.split("/");File realFile = new File(outFileName);//创建目录if (split.length > 1){for (int i = 0 ; i < split.length-1 ; i++){//最后一位为文件,不参与文佳夹创建realFile = new File(realFile, split[i]);}}if (!realFile.exists()){realFile.mkdirs();}return new File(realFile,split[split.length-1]);//在文件夹下创建文件}
}

测试类

package com.lx.ZipUtils;public class TestZip {public static void main(String[] args) throws Exception {ZipUtils.createZip("C:\\Users\\Desktop\\面试","C:\\Users\\Desktop\\0603.zip");ZipUtils.releaseZip("C:\\Users\\Desktop\\0603.zip","D:\\解压");}
}

测试过程中出现下面报错

原因是:在解压时,直接将文件名也作为路径创建,导致写出文件时找不到对应文件

找不到文件会报 拒绝访问

找不到文件夹回报 找不到对应路径

正确代码

错误代码

利用JUZ包实现文件压缩和解压相关推荐

  1. Linux的zip压缩文件压缩和解压

    Linux的zip压缩文件压缩和解压 <Linux一线运维实战>清华大学出版社(即将出版) 通常,系统中的文件的可以被直接打开的,这就难免文件的内容被查看.另外,对于要归档保存的(压缩)文 ...

  2. python调用程序压缩文件_Python实现文件压缩和解压的示例代码

    大家可能都熟悉.zip格式的文件.它可以把多个文件,压缩成一个文件.这在网络上传输时很有用,而且节省硬盘空间. 接下来,我们使用Python实现压缩和解压. 读取ZIP文件信息 要读取ZIP文件的内容 ...

  3. android文件压缩库,Android文件压缩和解压

    Android文件压缩和解压 Java代码 package com.maidong.utils; import java.io.BufferedInputStream; import java.io. ...

  4. python解压文件_使用Python实现文件压缩和解压

    大家可能都熟悉.zip格式的文件.它可以把多个文件,压缩成一个文件.这在网络上传输时很有用,而且节省硬盘空间. 接下来,我们使用Python实现压缩和解压. 读取ZIP文件信息 要读取ZIP文件的内容 ...

  5. c++创建文件_使用Python实现文件压缩和解压

    (点击上方快速关注并设置为星标,一起学Python) 来源:网络 大家可能都熟悉.zip格式的文件.它可以把多个文件,压缩成一个文件.这在网络上传输时很有用,而且节省硬盘空间. 接下来,我们使用Pyt ...

  6. java压缩和解压流,实现文件压缩和解压,代码都有注释

    压缩和解压流 压缩文件: ZipOutputStream 常用方法 方法名 介绍 ZipOutputStream(OutputStream out) 构造方法:创建新的ZIP输出流 public vo ...

  7. C#利用自带的ZipFile压缩和解压zip文件,超级简单

    ZipFile类是.NET Framework 4.5发布的一个C#压缩文件和解压zip文件的一个类库,它支持.NET Framework 4.5以上版本,包括.NET Core1.0和.NET5以上 ...

  8. Linux文件压缩和解压命令【gzip、gunzip、zip、unzip、tar】【详细总结】

    解压和压缩 gzip/gunzip gzip 压缩文件 gunzip 解压缩文件 zip/unzip zip 命令语法 命令选项 实例 unzip 语法: 命令选项 实例 tar 语法 实例 例一:将 ...

  9. Zip文件压缩和解压功能

    1.算法基本功:递归遍历文件夹 2.学会使用Java提供的ZipFile,ZipInputStream,ZipOutputStream,CharSet(抽象类) 3.具体实现: 解压方法1: 1.利用 ...

最新文章

  1. 编译器设计-RunTime运行时环境
  2. kafka log4j配置
  3. Oracle数据库之对象视图、索引、序列、同义词
  4. 静态资源部署到服务器不能访问
  5. interrupt、interrupted 、isInterrupted 区别
  6. TX2Ubuntu16.04上安装 kinectV2
  7. 设计模式之创建型(1)-简单工厂
  8. 如何搞定 K8S 微服务自动化发布系统
  9. 100个思维模型(不一定都适用,各取所需)
  10. Excel VBA 入门基础
  11. 输入一个整数,判断它是几位数
  12. 2023秋招360公司NLP算法岗面经
  13. 重视苹果和谷歌的警告信
  14. 你眼中的罗振宇和罗辑思维?
  15. 【java毕业设计】基于javaEE+SSH+mysql的百货中心供应链管理系统设计与实现(毕业论文+程序源码)——供应链管理系统
  16. 什么是SOA,谈谈自己的看法(转)
  17. mblock机器人指令_mBot机器人如何通过蓝牙实现与PC端mBlock的无线通信?
  18. 火炮火控系统嵌入式软件测试平台研究
  19. iOS 名片识别代码
  20. 怎么让用户用好你的在线帮助文档协作工具?

热门文章

  1. 学习笔记0521----mysql管理
  2. 协同OA行业五大关键词
  3. 科技周刊第三期:人脸识别技术给我们带来的便利和风险
  4. 数据告诉你:中国足球还有理论性出线的可能吗?
  5. 矩阵矩阵的维度矩阵按某一维度进行拼接
  6. windows邮箱无法登录腾讯企业邮箱
  7. CSS制作太极八卦图及衍生物
  8. 【shell】判断语句、循环语句
  9. css如何实现文字两端对齐,CSS如何实现文字两端对齐效果?
  10. SPEC MPI 安装运行