当前位置:网站首页>Zip包的读取与写入
Zip包的读取与写入
2022-08-09 15:01:00 【鸣筝鸣筝】
目录
ZipInputStream是一种FilterStream,它可以直接读取zip包的内容。
ZipOutPutStream是一种FilterOutPutStream,它可以直接写入内容到zip包。
一、Zip包的读取
ZipInputStream的基本用法:
首先要创建一个ZipInputStream,通常是传入一个FileInputStream作为数据源,然后循环调用getNextEntry(),当返回值为null时,表示zip流读取结束。
一个ZipEntry表示一个压缩文件或目录,如果是压缩文件,我们就用read()方法进行读取,当返回值为-1时,读取结束。
代码实现:
import java.io.FileInputStream;
import java.io.IOException;
import java.nio.charset.Charset;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;
public class Demo13 {
public static void main(String[] args) {
try (ZipInputStream in = new ZipInputStream(new FileInputStream("D:\\eclipse\\.metadata\\.mylyn\\tasks.xml.zip"),
Charset.forName("gbk"))) {
// ZipEntry表示一个压缩文件或目录
ZipEntry entry=null;
//获取压缩文件中的每个子文件
while((entry=in.getNextEntry())!=null) {
System.out.println(entry.getName());//文件名称
System.out.println(entry.getSize());//当前文件大小
System.out.println(entry.getCompressedSize());//压缩后文件大小
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
实现一个zip包的解压缩
步骤:
创建解压缩目录,获取zip文件名称;
根据zip文件名称,提取压缩目录的名称;
创建解压缩目录;
解析读取zip文件;
遍历zip文件中的每个子文件;
获取zip压缩包中的子文件名称;
创建该文件的输出流;
输出流定义在try()块,结束自动清空缓冲区并关闭;
获取该子文件字节内容;
代码实现:
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.nio.charset.Charset;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;
public class Demo01 {
public static void main(String[] args) {
//要进行解压缩的zip文件
File zipFile=new File("D:\\eclipse\\.metadata\\.mylyn\\tasks.xml.zip");
//创建解压缩目录
//获取zip文件名称
String zipFileName=zipFile.getName();
//根据zip文件名称,提取压缩目录的名称
String targetDirName=zipFileName.substring(0, zipFileName.indexOf("."));
//创建解压缩目录
File targetDir=new File(zipFile.getParent()+"\\"+targetDirName);
if(!targetDir.exists()) {
targetDir.mkdir();//创建目录
}
//解析读取zip文件
try (
ZipInputStream in = new ZipInputStream(new FileInputStream("D:\\eclipse\\.metadata\\.mylyn\\tasks.xml.zip"),
Charset.forName("gbk"))) {
//遍历zip文件中的每个子文件
ZipEntry zipEntry=null;
while((zipEntry=in.getNextEntry())!=null) {
//获取zip压缩包中的子文件名称
String zipEntrFileName=zipEntry.getName();
//创建该文件的输出流
String zipFilePath=targetDir.getPath()+"\\"+zipEntrFileName;
//输出流定义在try()块,结束自动清空缓冲区并关闭
try(BufferedOutputStream bos=new BufferedOutputStream(new FileOutputStream(zipFilePath))){
//获取该子文件字节内容
byte[] buff=new byte[1024];
int len=-1;
while((len=in.read(buff))!=-1) {
bos.write(buff, 0, len);
}
}
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
二、Zip包的写入
ZipOutPutStream是一种FilterOutPutStream,它可以直接写入内容到zip包,我们要先创建一个ZipOutPutStream,通常是包装一个FileOutPutStream,然后,每写入一个文件前,先调用putNextEntry(),然后用write()写入byte[ ]数据,写入完毕后调用closeEntry(),结束这个文件的打包。
实现一个文件的压缩
步骤:
将原始目录中的文件,写入“zip”压缩文件;
获取并遍历原始目录下的子文件列表;
创建一个zipEntry;
将原文件的字节内容,写入zip压缩包;
结束当前ZipEntry;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.nio.file.Files;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;
public class Demo02 {
public static void main(String[] args) {
//原始目录
File rootDir=new File("D:\\灰灰\\.settings");
//将原始目录中的文件,写入“zip”压缩文件
try (
ZipOutputStream out = new ZipOutputStream(new FileOutputStream
(rootDir.getParent()+"\\"+rootDir.getName()+".zip"))) {
//获取并遍历原始目录下的子文件列表
File[] files=rootDir.listFiles();
for(File f:files) {
//创建一个zipEntry
out.putNextEntry(new ZipEntry(f.getName()));
//将原文件的字节内容,写入zip压缩包
out.write(Files.readAllBytes(f.toPath()));
//结束当前ZipEntry
out.closeEntry();
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
边栏推荐
猜你喜欢
随机推荐
Unity Shader 透视效果/XRay
go使用Consul实用指南
Vim实用技巧_2.普通模式和插入模式
MATLAB Solution to Planning Problems - MATLAB in Mathematical Modeling (2nd Edition)
weiteUP-ciscn_2019_c_1
模糊综合评价
【力扣】11. 盛最多水的容器
服务端媒体引擎框架
C语言,输入一个10以内的随机数,按要求求得表达式的值。
Markdown 文档生成 PDF
软件测试流程
Basic Concepts of Software Security
Unity Shader零基础入门3:逐像素光照、Blinn-Phong、透明度
【力扣】17. 电话号码的字母组合
Postgraduate Work Weekly (Week 4)
堆(heap)系列_0x02:堆的前世今生(WinDbg+Visual Studio汇编)
2022.7.16学习总结
Vim practical skills_3. Visual mode and command mode
websocket协议详解与抓包分析
Virtualbox 设置共享文件夹