程序实现了ZIP压缩。共分为2部分 : 压缩(compression)与解压(decompression)

大致功能包括用了多态,递归等JAVA核心技术,可以对单个文件和任意级联文件夹进行压缩和解压。 需在代码中自定义源输入路径和目标输出路径。

package com.han;

import java.io.*;

import java.util.zip.*;

/**

* 程序实现了ZIP压缩。共分为2部分 : 压缩(compression)与解压(decompression)

*

* 大致功能包括用了多态,递归等JAVA核心技术,可以对单个文件和任意级联文件夹进行压缩和解压。 需在代码中自定义源输入路径和目标输出路径。

*

* 在本段代码中,实现的是压缩部分;解压部分见本包中Decompression部分。

*

* @author HAN

*

*/

public class MyZipCompressing {

private int k = 1; // 定义递归次数变量

public MyZipCompressing() {

// TODO Auto-generated constructor stub

}

/**

* @param args

*/

public static void main(String[] args) {

// TODO Auto-generated method stub

MyZipCompressing book = new MyZipCompressing();

try {

book.zip("C:\\Users\\Gaowen\\Desktop\\ZipTestCompressing.zip",

new File("C:\\Users\\Gaowen\\Documents\\Tencent Files"));

} catch (Exception e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

private void zip(String zipFileName, File inputFile) throws Exception {

System.out.println("压缩中...");

ZipOutputStream out = new ZipOutputStream(new FileOutputStream(

zipFileName));

BufferedOutputStream bo = new BufferedOutputStream(out);

zip(out, inputFile, inputFile.getName(), bo);

bo.close();

out.close(); // 输出流关闭

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

}

private void zip(ZipOutputStream out, File f, String base,

BufferedOutputStream bo) throws Exception { // 方法重载

if (f.isDirectory()) {

File[] fl = f.listFiles();

if (fl.length == 0) {

out.putNextEntry(new ZipEntry(base + "/")); // 创建zip压缩进入点base

System.out.println(base + "/");

}

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

zip(out, fl[i], base + "/" + fl[i].getName(), bo); // 递归遍历子文件夹

}

System.out.println("第" + k + "次递归");

k++;

} else {

out.putNextEntry(new ZipEntry(base)); // 创建zip压缩进入点base

System.out.println(base);

FileInputStream in = new FileInputStream(f);

BufferedInputStream bi = new BufferedInputStream(in);

int b;

while ((b = bi.read()) != -1) {

bo.write(b); // 将字节流写入当前zip目录

}

bi.close();

in.close(); // 输入流关闭

}

}

}

package com.han;

import java.io.*;

import java.util.zip.*;

/**

* 程序实现了ZIP压缩。共分为2部分 :

* 压缩(compression)与解压(decompression)

*

* 大致功能包括用了多态,递归等JAVA核心技术,可以对单个文件和任意级联文件夹进行压缩和解压。

* 需在代码中自定义源输入路径和目标输出路径。

*

* 在本段代码中,实现的是解压部分;压缩部分见本包中compression部分。

* @author HAN

*

*/

public class CopyOfMyzipDecompressing {

public static void main(String[] args) {

// TODO Auto-generated method stub

long startTime=System.currentTimeMillis();

try {

ZipInputStream Zin=new ZipInputStream(new FileInputStream(

"C:\\Users\\HAN\\Desktop\\stock\\SpectreCompressed.zip"));//输入源zip路径

BufferedInputStream Bin=new BufferedInputStream(Zin);

String Parent="C:\\Users\\HAN\\Desktop"; //输出路径(文件夹目录)

File Fout=null;

ZipEntry entry;

try {

while((entry = Zin.getNextEntry())!=null && !entry.isDirectory()){

Fout=new File(Parent,entry.getName());

if(!Fout.exists()){

(new File(Fout.getParent())).mkdirs();

}

FileOutputStream out=new FileOutputStream(Fout);

BufferedOutputStream Bout=new BufferedOutputStream(out);

int b;

while((b=Bin.read())!=-1){

Bout.write(b);

}

Bout.close();

out.close();

System.out.println(Fout+"解压成功");

}

Bin.close();

Zin.close();

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

} catch (FileNotFoundException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

long endTime=System.currentTimeMillis();

System.out.println("耗费时间: "+(endTime-startTime)+" ms");

}

}

java zip压缩解压_JAVA实现实用的ZIP压缩与解压相关推荐

  1. java一个方法排他调用_Java编程实现排他锁代码详解

    一 .前言 某年某月某天,同事说需要一个文件排他锁功能,需求如下: (1)写操作是排他属性 (2)适用于同一进程的多线程/也适用于多进程的排他操作 (3)容错性:获得锁的进程若Crash,不影响到后续 ...

  2. java上传rar文件_java实现上传zip/rar压缩文件,自动解压

    在pom中添加解压jar依赖 4.0.0 org.springframework.boot spring-boot-starter-parent 2.1.2.RELEASE com.hf uncomp ...

  3. java oss如何下载文件_Java OSS批量下载并压缩为ZIP代码实例

    这篇文章主要介绍了Java OSS批量下载并压缩为ZIP代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 /** * 批量下载为zip * @ ...

  4. java连接mysql数据库方法_java连接mysql数据库的方法详解

    连接mysql数据库在java中有几种常用的方式有官方提供的JDBC连接MySQL数据库也有后面我们讲到的其它的方式连接数据库,具体如下. JDBC连接MySQL数据库 首先要下载Connector/ ...

  5. java原生类型没有封装_Java基本数据类型与封装类型详解(int和Integer区别)

    Java基本数据类型与封装类型详解(int和Integer区别) 发布于 2020-4-19| 复制链接 摘记: int是java提供的8种原始数据类型之一.Java为每个原始类型提供了封装类,Int ...

  6. java 封装表单数据类型_Java基本数据类型与封装类型详解(int和Integer区别)

    int是java提供的8种原始数据类型之一. Java为每个原始类型提供了封装类,Integer是java为int提供的封装类(即Integer是一个java对象,而int只是一个基本数据类型).in ...

  7. java 获取oracle表结构_Java导出oracle表结构实例详解

    Java导出oracle表结构实例详解 发布于 2020-7-20| 复制链接 摘记:  Java导出oracle表结构实例详解最近用到的,因为plsql是收费的,不让用,找了很多方法终于发现了这个. ...

  8. java 压缩二进制流_Java:自己动手写压缩软件,超详细解释(哈夫曼实现)

    三.哈夫曼编码生成步骤: ① 扫描要压缩的文件,对字符出现的频率进行计算. ② 把字符按出现的频率进行排序,组成一个队列. ③ 把出现频率最低(权值)的两个字符作为叶子节点,它们的权值之和为根节点组成 ...

  9. java this关键字的使用_Java this 关键字的使用方法详解

    Java this 关键字的使用方法详解 构造方法中的this关键字 构造方法是一个类的对象在通过new关键字创建时自动调用的,在程序中不能向调用其他方法一样通过方法名(也就是类名)来调用.但如果一个 ...

最新文章

  1. 准确度判断 语义分割_Mask R-CNN(目标检测语义分割)测试
  2. axios的this指向_vue使用axios中 this 指向问题
  3. 【PAT乙级】1087 有多少不同的值 (20 分)
  4. git clone 一部分_Git/GitHub 中文术语表 | Linux 中国
  5. 进程常用指令 (从创建到回收 包含守护)
  6. 用MDT 2012为企业部署windows 7(七)--创建标准操作系统部署任务序列
  7. 笔记本电脑键盘切换_有哪些好用的办公键盘
  8. 查找(四)-------基于B树的查找和所谓的B树
  9. 如何在Vue项目中使用vw实现移动端适配
  10. 2.C语言基础-sprintf函数用法
  11. Opencv系列1_opencv对单张DCM文件的读取并显示
  12. linux qt qpa linuxfb,Linux qt qt.qpa.plugin: Could not load the Qt platform plugin xcb error解决方...
  13. POI读取PPT图表模板,动态改变图表数据,操作图表
  14. Gitlab权限说明
  15. linux如何删除多余引导
  16. 共阴数码管C语言单片机,51单片机直接驱动共阴极数码管
  17. php错误测试,对 PHP 错误进行测试
  18. Cookie--防劫持的处理
  19. 静态/动态博客Blog框架简介
  20. 一、Git介绍、以及原理

热门文章

  1. js网页3D雪花特效插件(导入直接使用,参数齐全)
  2. idea社区版配置jsp
  3. spring cloud 之 Ribbon
  4. 机器学习实战一:泰坦尼克号生存预测 Titantic
  5. @iptables防火墙详解
  6. Android获取通讯录联系人,右侧字母滑动索引
  7. 4.24 使用计算命令制作图像合成艺术效果 [原创Ps教程]
  8. Mysql入门【Mysql约束】
  9. Android内、外存储 易混淆点剖析(/mnt/sdcard、/storage/sdcard0、/storage/emulated/0等区别)
  10. 解决scrapy爬虫报错 pymongo.errors.DuplicateKeyError: E11000 duplicate key error collection