java压缩与解压
一 概述
1.目录进入点
目录进入点是文件在压缩文件中的映射,代表压缩文件。压缩文件时,创建目录进入点,将文件写入该目录进入点。解压时,获取目录进入点,将该目录进入点的内容写入硬盘指定文件。
如果目录进入点是一个文件夹,在命名时必须以路径分隔符结尾,在Window操作系统中名称分隔符为“/”。
2.文件的自动创建
无论是调用createNewFile()创建文件,还是在创建输出流时由输出流负责创建文件,都必须保证父路径已经存在,否则文件无法创建。
3.目录的创建
- mkdirs():创建多级目录。
- mkdir():创建一级目录,如果父路径不存在,创建失败。
二 压缩
1.创建目录进入点
首先为文件或者文件夹创建目录进入点,目录进入点的名称为当前文件相对于压缩文件的路径,文件夹的目录进入点名称必须以名称分隔符结尾,以区别于文件。
ZipEntry entry = new ZipEntry(压缩文件夹名称 + File.separator+文件或文件夹路径);
2.写入目录进入点
使用ZipOutputStream输出流将文件写入对应目录进入点中,写入完成,关闭目录进入点。

3.Demo
package com.javase.io; import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;
import java.util.zip.ZipOutputStream; public class ZipUtils { /**
* 压缩一个文件夹
*
* @throws IOException
*/
public void zipDirectory(String path) throws IOException {
File file = new File(path);
String parent = file.getParent();
File zipFile = new File(parent, file.getName() + ".zip");
ZipOutputStream zos = new ZipOutputStream(new FileOutputStream(zipFile));
zip(zos, file, file.getName());
zos.flush();
zos.close();
} /**
*
* @param zos
* 压缩输出流
* @param file
* 当前需要压缩的文件
* @param path
* 当前文件相对于压缩文件夹的路径
* @throws IOException
*/
private void zip(ZipOutputStream zos, File file, String path) throws IOException {
// 首先判断是文件,还是文件夹,文件直接写入目录进入点,文件夹则遍历
if (file.isDirectory()) {
ZipEntry entry = new ZipEntry(path + File.separator);// 文件夹的目录进入点必须以名称分隔符结尾
zos.putNextEntry(entry);
File[] files = file.listFiles();
for (File x : files) {
zip(zos, x, path + File.separator + x.getName());
}
} else {
FileInputStream fis = new FileInputStream(file);// 目录进入点的名字是文件在压缩文件中的路径
ZipEntry entry = new ZipEntry(path);
zos.putNextEntry(entry);// 建立一个目录进入点 int len = 0;
byte[] buf = new byte[1024];
while ((len = fis.read(buf)) != -1) {
zos.write(buf, 0, len);
}
zos.flush();
fis.close();
zos.closeEntry();// 关闭当前目录进入点,将输入流移动下一个目录进入点
}
} }
三 解压文件
1.基本思路
解压文件时,先获取压缩文件中的目录进入点,根据该目录进入点创建文件对象,将目录进入点的内容写入硬盘文件中。

2.Demo
package com.javase.io; import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;
import java.util.zip.ZipOutputStream; public class ZipUtils {private String basePath; /**
* 解压文件
*
* @param unzip
* @throws IOException
*/
public void unzip(String unzip) throws IOException {
File file = new File(unzip);
basePath = file.getParent();
FileInputStream fis = new FileInputStream(file);
ZipInputStream zis = new ZipInputStream(fis);
unzip(zis);
} private void unzip(ZipInputStream zis) throws IOException {
ZipEntry entry = zis.getNextEntry();
if (entry != null) {
File file = new File(basePath + File.separator + entry.getName());
if (file.isDirectory()) {
// 可能存在空文件夹
if (!file.exists())
file.mkdirs();
unzip(zis);
} else {
File parentFile = file.getParentFile();
if (parentFile != null && !parentFile.exists())
parentFile.mkdirs();
FileOutputStream fos = new FileOutputStream(file);// 输出流创建文件时必须保证父路径存在
int len = 0;
byte[] buf = new byte[1024];
while ((len = zis.read(buf)) != -1) {
fos.write(buf, 0, len);
}
fos.flush();
fos.close();
zis.closeEntry();
unzip(zis);
}
}
} }
java压缩与解压的更多相关文章
- java压缩文件解压:调用WinRAR5命令强于自己写代码实现
最近,手上维护着一个几年前的系统,技术是用的JSP+Strust2,系统提供了rar和zip两种压缩格式的解压功能,后台是用java实现的 1.解压rar格式,采用的是java-unrar-0.3.j ...
- java 压缩与解压
最近复习到IO,想找个案例做一做,恰好下载了许多图片压缩包,查看图片很不方便,所以打算用IO把图片都解压到同一个文件夹下.然后集中打包. 本例使用jdk自带的ZipInputStream和ZipOut ...
- java 压缩以及解压文件,有tar,zip,gz(gizp)和解压
package com.yabsz.decompCompr; import java.io.File; import java.util.ArrayList; import java.util.Lis ...
- java压缩与解压文件
import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.File; import ...
- Java实现文件压缩与解压
Java实现ZIP的解压与压缩功能基本都是使用了Java的多肽和递归技术,可以对单个文件和任意级联文件夹进行压缩和解压,对于一些初学者来说是个很不错的实例.(转载自http://www.puiedu. ...
- Java实现文件压缩与解压[zip格式,gzip格式]
Java实现ZIP的解压与压缩功能基本都是使用了Java的多肽和递归技术,可以对单个文件和任意级联文件夹进行压缩和解压,对于一些初学者来说是个很不错的实例. zip扮演着归档和压缩两个角色:gzip并 ...
- java zip 压缩与解压
java zip 压缩与解压 import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java. ...
- PAT(B) 1078 字符串压缩与解压(Java)
题目链接:1078 字符串压缩与解压 (20 point(s)) 题目描述 文本压缩有很多种方法,这里我们只考虑最简单的一种:把由相同字符组成的一个连续的片段用这个字符和片段中含有这个字符的个数来表示 ...
- Java的压缩、解压及压缩加密、解密解压 样例
为了节约带宽.加快传送速度,http协议支持gzip的压缩,但假设我们的app与后台不是通过http协议通讯的.那么压缩.解压这个流程须要自己写.以下给出compress和decompress的代码: ...
随机推荐
- Hibernate 初识
第一步: 导包:(这是我根据其他网站的介绍导入的包,可能不完善,但开发没什么问题,遇到问题再说) 当然还有mysql的jar包 第二步:进行hibernate环境配置 在classpath目录下建立h ...
- origin显示三维曲面
准备数据并选中数据: 这里如果只关心z<1部分的趋势,可以对Z轴范围进行调整,双击Z轴的数字: 然后修改显色条的范围,双击曲面: 最后让曲面最上面部分clip掉: 成功了:
- [转] 基于Gitlab CI搭建持续集成环境
[From] https://blog.csdn.net/wGL3k77y9fR1k61T1aS/article/details/78798577 前言 本文是在12月12号迅雷@赵兵在前端早读课第三 ...
- Python爬虫常用之登录(一) 思想
爬虫主要目的是获取数据,常见的数据可以直接访问网页或者抓包获取,然后再解析即可. 一些较为隐私的数据则不会让游客身份的访问者随便看到,这个时候便需要登录获取. 一般获取数据需要的是登录后的cookie ...
- odoo 的一些orm 操作
1.基础文件及目录结构 在认识odoo ORM框架前,先介绍一下odoo中模块目录结构. data:存放模块预制数据 i18n:存放国际化文件 models:存放模型等py代码 securit ...
- nodejs之socket.io 私发消息和选择群组发消息
写在前面:其实有的时候忙碌是好的,比如忙碌起来的自己手机可以一天耗费掉只有20%的电,忙碌的自己很专心于一件事情,但是忙碌不等于过度疲劳,本周忙碌有点上脑,迷糊了一天,都在补觉,还是要去平衡下自己一天 ...
- springboot利用fastjson序列化输出(默认是jackson)
在@SpringBootApplication类中添加 @Bean public HttpMessageConverters fastJsonHttpMessageConverters() { //创 ...
- CSAPP阅读笔记-数组分配与访问-来自第三章3.8的笔记-P176-P183
这一节比较简单,仅记录几个比较重要的点: 1.C语言允许对指针进行运算,计算出的值会根据该指针引用的数据类型大小进行伸缩. 例子: 其中,xE是数组的起始地址.注意,指针运算时,若最终结果为指针,则指 ...
- ubuntu 16.04 tensorboard 学习
一.新建tensorboard的文件夹,并在该文件夹下打开终端进入python输入以下代码 ////////新建文件夹取名tensorboard 在该目录下打开终端 import tensorflow ...
- 【Css】一个简单的选项卡
这次来做一个简单的选项卡. 选项卡其实就分3个部分:html代码,用于显示的内容:css代码,用于显示的样式:javascript代码,用于点击事件. 老规矩,先写一个html坯子. <!DOC ...