ZIP文件条目
Class ZipEntry
java.lang.Object
java.util.zip.ZipEntry
ZipEntry类 产生的对象,用来代表代表ZIP压缩文件的进入点
构造方法
ZipEntry(String name)
ZipEntry(ZipEntry e)
name:条目名称
e:zip条目对象
由于方法过多自行查JDK文档 ,后续有代码例子有说明
压缩流(压缩文件)
Class ZipOutputStream
java.lang.Object
java.io.OutputStream
java.io.FilterOutputStream
java.util.zip.DeflaterOutputStream
java.util.zip.ZipOutputStream
大致流程
- 创建被压缩的对象 和 压缩包的对象
- 创建 字节输出流 和 压缩输出流
- 为文件创建ZipEntry条目
- 将读取的数据通过输出流写入到硬盘中
- 完成压缩
构造方法
ZipOutputStream(OutputStream out)
out:输出流
方法
修饰符 | 方法 | 说明 |
---|---|---|
void | close() | 关闭流 |
void | closeEntry() | 关闭当前的ZIP条目,并定位流以写入下一个条目 |
void | finish() | 完成编写ZIP输出流的内容,而不关闭底层流 |
void | putNextEntry(ZipEntry e) | 开始编写新的ZIP文件条目,并将流定位到条目数据的开头 |
void | setComment(String comment) | 设置ZIP文件注释 |
void | write(byte[] b, int off, int len) | 将字节数组写入当前的ZIP条目数据 |
例子1 (老师讲解的例题)
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;
public class Demo {
static void compress(){
//创建被压缩的对象
File source = new File("E:\\png\\");
//创建压缩包的对象
File target = new File("E:\\mr.zip");
//try括号内的资源会在try语句结束后自动释放,前提是这些可关闭的资源必须实现
//创建字节输出流、压缩输出流
try(FileOutputStream fis = new FileOutputStream(target);
ZipOutputStream zos = new ZipOutputStream(fis)){
//判断是否是文件夹
if(source.isDirectory()){
//遍历文件夹的文件
for(File f : source.listFiles()){
addEntry(zos , "" , f);
}
}else{
addEntry(zos,"",source);
}
}catch (Exception e){
e.printStackTrace();
}
}
/*
*
* 该方法用来写入文件数据 和 重新遍历文件夹
* 方法参数:
* zos:压缩流
* base: 文件在压缩包中的路径
* source:被压缩的文件
*
* */
static void addEntry(ZipOutputStream zos , String base , File source){
//判断是否是文件夹
if (source.isDirectory()){
//判断为文件夹
//遍历文件夹的文件
for (File file : source.listFiles()){
/*
* 参数2:
* base:文件路径
* source.getName():文件夹名称
* File.separator:分隔符( \\ 和 / )
*
* */