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的代码: ...
随机推荐
- jquery选项卡效果
效果图: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF- ...
- 3、激活层(Activiation Layers)及参数
caffe激活层(Activiation Layers) 在激活层中,对输入数据进行激活操作(实际上就是一种函数变换),是逐元素进行运算的.从bottom得到一个blob数据输入,运算后,从top输入 ...
- SAP生产订单各种日期的计算说明
生产订单各种日期的计算说明 基本日期.已计划的.确认的日期,介绍一下这些日期的作用和计算方法: 首先我们来介绍一下基本日期: 基本开始日期:表示订单的开始日期 基本完成日期:表示订单的完成日期 我们在 ...
- 洛谷P5156 [USACO18DEC]Sort It Out
这题就是让你求字典序第k小的最短乱序子序列 转换一下,其实就是字典序第k大的最长上升子序列 就统计一下以i结尾的最长上升子序列\(f[i]\),长度为i的上升子序列的开头组成的集合\(v[i]\),转 ...
- MyEclipse 汉化后切换回英文(中英文切换)
没事玩玩MyEclipse,按网上的办法把它汉化了!搞了些教程看,教程用的都是英文,还是把MyEclipse也切换回原来的英文得了! 方法:1.复制MyEclipse的快捷方式:2.右键快捷方式-&g ...
- 离线安装eclipse的maven插件包
离线安装eclipse的maven插件包 1.打开你本地的eclipse根目录,随便新建一个文件夹例如mavenPlugin,把maven离线插件包中两个文件夹复制到这个新建的这个文件夹里边 2.找到 ...
- 《The One!团队》第一次作业:团队亮相
项目 内容 作业所属课程 http://www.cnblogs.com/nwnu-daizh/ 作业要求 https://www.cnblogs.com/nwnu-daizh/p/10687492.h ...
- Linux C代码 获取IP地址
Ubuntu 16.04下,可编译通过: #include <stdio.h> #include <ifaddrs.h> #include <arpa/inet.h> ...
- Oracle系统表整理 --sql
-- DBA/ALL/USER/V_$/GV_$/SESSION/INDEX开头的绝大部分都是视图-- DBA_TABLES意为DBA拥有的或可以访问的所有的关系表.-- ALL_TABLES意为某一 ...
- (转)最新版 nginx内置变量 大全
原文:http://www.cnphp.info/nginx-embedded-variables-lasted-version.html 在配置基于nginx服务器的网站时,必然会用到 nginx内 ...