java中解压流的条目_JAVA笔记整理-File文件类-压缩流和解压流

本文介绍了Java中如何使用`java.util.zip`包进行文件的压缩和解压。压缩文件涉及`ZipEntry`、`ZipFile`和`ZipOutputStream`,解压文件则用到`ZipInputStream`和`ZipFile`,通过遍历每个`ZipEntry`并将其写入目标位置完成解压操作。示例代码详细展示了压缩单个文件、整个文件夹以及解压文件的完整流程。
摘要由CSDN通过智能技术生成

一、文件的压缩流和解压流

1、为什么需要使用压缩文件

文件压缩使用场景: 在文件上传或下载中需要操作多个文件时,如果一个一个复制需要花较长时间,而且比较繁琐,javaAPI提供一种压缩/解压文件方式,可以将多个文件打包成一个文件(.zip)

包: java.util.zip

常用类: ZipEntry: 表示压缩文件中的每一个实体文件

​ZipFile: 表示压缩文件对象

​ZipOutputStream: 表示压缩文件输出流,用于将普通文件写出到zip文件中

​ZipInputStream: 表示解压文件的输入流,用于读zip文件中的每一个实体ZipEntry

3b6bf034df500d612cfcf919cc397d4e.png

这里的abcd.txt就是一个ZipEntry

2、压缩文件步骤

60821a1801afeb3708ac10392e4f115c.png

​ a、创建需要压缩文件的输入流(InputStream )

​ b、创建压缩包所在的路径,并指定压缩文件名,同时创建ZipOutputStream输出流

​ c、将文件对象 添加到 ZipOutputStream中的实体中(也可以指定压缩后的实体名称)

​ d、文件复制

​ e、关闭流

public static void main(String[] args) throws IOException {

// 1、创建文件对象

File file = new File("d:/小众网站.txt");

// 2、创建文件的输入流

FileInputStream fis = new FileInputStream(file);

// 3、创建文件压缩流(输出流)

ZipOutputStream zos = new ZipOutputStream(

new FileOutputStream("d:/myfile.zip"));

// 给压缩包中添加文件,并可自定义文件名

zos.putNextEntry(new ZipEntry("小众网站.txt "));

// 给压缩包设置注释

zos.setComment("这是压缩包的注释。。。。");

// 文件复制

int len = 0;

byte [] b = new byte[1024];

while( (len = fis.read(b)) !=-1){

zos.write(b,0,len);

}

System.out.println("文件压缩成功");

zos.close();

fis.close();

}

压缩多个文件

/**

* 压缩一个文件夹 myfile

* @param args

*/

public static void main(String[] args) throws IOException {

//构建压缩包的输出流

ZipOutputStream zos = new ZipOutputStream(

new FileOutputStream("d:/myfile.zip"));

File file=new File("d:/myfile");

File [] files = file.listFiles();

for(File f : files){

//构造每一个文件的输入流

FileInputStream fis = new FileInputStream(f);

putZipFile(fis, zos ,f.getName());

System.out.println(f.getName()+"文件压缩成功" );

}

//关闭压缩流

zos.flush();

zos.close();

}

/**

* 将文件放入压缩流中

* @param fis

* @param zos

* @param entryName

* @throws IOException

*/

public static void putZipFile(InputStream fis ,

ZipOutputStream zos,

String entryName) throws IOException {

// 给压缩包中添加文件,并可自定义文件名

zos.putNextEntry(new ZipEntry(entryName));

// 给压缩包设置注释

zos.setComment("这是压缩包的注释。。。。");

// 文件复制

int len = 0;

byte [] b = new byte[1024];

while( (len = fis.read(b)) !=-1){

zos.write(b,0,len);

}

System.out.println("文件压缩成功");

fis.close();

}

3、解压文件步骤

​ 解压文件是将一个.zip文件的内容,复制到文件下,需要使用ZipInputStream

​ 解压文件的关键点: 获取解压文件的每一个条目ZipEntry的输入流 ,将输入流写出到指定位置。

​ 如何获取输入流: ZipFile对象 表示一个zip文件

2e477cbb75c4b17c76769590d6ff9692.png

步骤:

​a、根据文件路径 创建ZipInputStream

​ b、根据文件路径创建ZipFile对象

​ c、循环遍历每一天条目, 得到它的ZipEntry

​ d、获取ZipEntry的输入流

​e、将文件复制到指定位置

public static void main(String[] args) throws IOException {

//1、创建ZipInputStream

ZipInputStream zis = new ZipInputStream(

new FileInputStream("d:/myfile.zip"));

// 2、创建ZipFile对象

ZipFile zipFile = new ZipFile("d:/myfile.zip");

// 3、获取zip中的实体

ZipEntry en = null;

while( (en= zis.getNextEntry())!=null){

System.out.println(en.getName()+"--"+en.isDirectory());

//4、获取每一个en的输入流 (关键)

InputStream is = zipFile.getInputStream(en);

copyFile(is ,"d:/my",en.getName());

}

}

/**

* 通过输入流 复制文件到指定的目录下

* @param is 输入流

* @param path 存放文件的路径

* @param fileName 文件名

*/

public static void copyFile(InputStream is , String path , String fileName) throws IOException {

File file = new File(path);

//判断目录是否存在, 不存在就 创建

if(!file.exists()){

file.mkdirs();

}

FileOutputStream fos = new FileOutputStream(path+File.separator+fileName);

int len = 0 ;

byte [] b = new byte[1024];

while( (len = is.read(b)) !=-1){

fos.write(b,0,len);

}

System.out.println("解压成功");

fos.close();

is.close();

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值