java zip压缩解压_JAVA实现实用的ZIP压缩与解压
程序实现了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压缩与解压相关推荐
- java一个方法排他调用_Java编程实现排他锁代码详解
一 .前言 某年某月某天,同事说需要一个文件排他锁功能,需求如下: (1)写操作是排他属性 (2)适用于同一进程的多线程/也适用于多进程的排他操作 (3)容错性:获得锁的进程若Crash,不影响到后续 ...
- java上传rar文件_java实现上传zip/rar压缩文件,自动解压
在pom中添加解压jar依赖 4.0.0 org.springframework.boot spring-boot-starter-parent 2.1.2.RELEASE com.hf uncomp ...
- java oss如何下载文件_Java OSS批量下载并压缩为ZIP代码实例
这篇文章主要介绍了Java OSS批量下载并压缩为ZIP代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 /** * 批量下载为zip * @ ...
- java连接mysql数据库方法_java连接mysql数据库的方法详解
连接mysql数据库在java中有几种常用的方式有官方提供的JDBC连接MySQL数据库也有后面我们讲到的其它的方式连接数据库,具体如下. JDBC连接MySQL数据库 首先要下载Connector/ ...
- java原生类型没有封装_Java基本数据类型与封装类型详解(int和Integer区别)
Java基本数据类型与封装类型详解(int和Integer区别) 发布于 2020-4-19| 复制链接 摘记: int是java提供的8种原始数据类型之一.Java为每个原始类型提供了封装类,Int ...
- java 封装表单数据类型_Java基本数据类型与封装类型详解(int和Integer区别)
int是java提供的8种原始数据类型之一. Java为每个原始类型提供了封装类,Integer是java为int提供的封装类(即Integer是一个java对象,而int只是一个基本数据类型).in ...
- java 获取oracle表结构_Java导出oracle表结构实例详解
Java导出oracle表结构实例详解 发布于 2020-7-20| 复制链接 摘记: Java导出oracle表结构实例详解最近用到的,因为plsql是收费的,不让用,找了很多方法终于发现了这个. ...
- java 压缩二进制流_Java:自己动手写压缩软件,超详细解释(哈夫曼实现)
三.哈夫曼编码生成步骤: ① 扫描要压缩的文件,对字符出现的频率进行计算. ② 把字符按出现的频率进行排序,组成一个队列. ③ 把出现频率最低(权值)的两个字符作为叶子节点,它们的权值之和为根节点组成 ...
- java this关键字的使用_Java this 关键字的使用方法详解
Java this 关键字的使用方法详解 构造方法中的this关键字 构造方法是一个类的对象在通过new关键字创建时自动调用的,在程序中不能向调用其他方法一样通过方法名(也就是类名)来调用.但如果一个 ...
最新文章
- 准确度判断 语义分割_Mask R-CNN(目标检测语义分割)测试
- axios的this指向_vue使用axios中 this 指向问题
- 【PAT乙级】1087 有多少不同的值 (20 分)
- git clone 一部分_Git/GitHub 中文术语表 | Linux 中国
- 进程常用指令 (从创建到回收 包含守护)
- 用MDT 2012为企业部署windows 7(七)--创建标准操作系统部署任务序列
- 笔记本电脑键盘切换_有哪些好用的办公键盘
- 查找(四)-------基于B树的查找和所谓的B树
- 如何在Vue项目中使用vw实现移动端适配
- 2.C语言基础-sprintf函数用法
- Opencv系列1_opencv对单张DCM文件的读取并显示
- linux qt qpa linuxfb,Linux qt qt.qpa.plugin: Could not load the Qt platform plugin xcb error解决方...
- POI读取PPT图表模板,动态改变图表数据,操作图表
- Gitlab权限说明
- linux如何删除多余引导
- 共阴数码管C语言单片机,51单片机直接驱动共阴极数码管
- php错误测试,对 PHP 错误进行测试
- Cookie--防劫持的处理
- 静态/动态博客Blog框架简介
- 一、Git介绍、以及原理
热门文章
- js网页3D雪花特效插件(导入直接使用,参数齐全)
- idea社区版配置jsp
- spring cloud 之 Ribbon
- 机器学习实战一:泰坦尼克号生存预测 Titantic
- @iptables防火墙详解
- Android获取通讯录联系人,右侧字母滑动索引
- 4.24 使用计算命令制作图像合成艺术效果 [原创Ps教程]
- Mysql入门【Mysql约束】
- Android内、外存储 易混淆点剖析(/mnt/sdcard、/storage/sdcard0、/storage/emulated/0等区别)
- 解决scrapy爬虫报错 pymongo.errors.DuplicateKeyError: E11000 duplicate key error collection