文章目录
- 前言
- 一、ZIP压缩输出流是什么?
- 二、使用介绍
- 1.使用方法
- 2.实操展示
- 总结
前言
该篇文章相对应的介绍如何使用java代码将各种文件(文件夹)从ZIP压缩文件中取出到指定的文件夹中。解压流将ZIP文件中的文件以条目的形式逐一读取,数据写入对应创建的文件夹中。
一、ZIP压缩输出流是什么?
Zip压缩输出流是指将数据从Zip文件中解压到指定文件的输出流。ZipInoutStream类可读取ZIP压缩格式的文件,包括已压缩和未压缩的条目(entry)。
二、使用介绍
1.使用方法
(1)构造方式:
new ZipInputStream(InputStream in);
//该构造方式参数 in 为输出流对象
(2)常用方法:
方法 | 功能描述 |
read(byte[] b,int off,int len) | 读取字节数组b内off偏移量的位置,长度是len字节 |
available() | 判断是否已读完目前entry所指定的数据。已读完返回0,否则返回1 |
closeEntry() | 关闭当前ZIP条目并定位流以读取下一个条目 |
skip(long n) | 跳过当前ZIP条目中的指定字节数 |
getNextEntry() | 读取下一个ZipEntry,并将流内的位置移至该entry所指数据的开头 |
createZipEntry(String name) | 以指定的name参数新建一个ZipEntry对象 |
解压流程图
2.实操展示
代码如下(示例):
import java.io.*;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;
public class DeZip1 {
public static void unzipFile(File zipFile, String destDirectory) {
byte[] buffer = new byte[1024]; //创建缓存区
try (ZipInputStream zis = new ZipInputStream(new FileInputStream(zipFile))) {
ZipEntry zipEntry = zis.getNextEntry(); //开启Zip条目
while (zipEntry != null) { //循环读取全部压缩文件
String fileName = zipEntry.getName(); //获取压缩文件名称
//创建解压文件
File newFile = new File(destDirectory + File.separator + fileName);
if (zipEntry.isDirectory()) { //若条目为文件夹,创建完整的文件夹目录
newFile.mkdirs();
} else { //若条目为文件
//创建解压文件的父目录,确保解压文件目录结构正常
new File(newFile.getParent()).mkdirs();
//创建文件输入流
try (FileOutputStream fos = new FileOutputStream(newFile)) {
int len;
//解压流将数据从压缩包读取,输入流将数据写入解压文件中
while ((len = zis.read(buffer)) > 0) {
fos.write(buffer, 0, len);
fos.flush();
}
}
}
zipEntry = zis.getNextEntry();
}
zis.closeEntry();
} catch (IOException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
File zipFile = new File("D:/word.zip");
String destDirectory = "D:/word";
unzipFile(zipFile, destDirectory);
}
}
运行结果:
压缩包中的文件
运行后文件被解压到了指定文件
mkdirs()方法如何获取到文件的路径?
mkdirs() 方法是 Java 中的一个文件夹创建方法,用于创建一个文件夹以及它的所有父文件夹。该方法会返回一个 boolean 类型的值,表示文件夹是否创建成功。
mkdirs() 方法获取文件夹路径的方式主要通过传入参数来实现。你可以在方法中传入一个字符串类型的参数,该参数表示文件夹的路径。例如:
File dir = new File("C:\\Users\\username\\Documents\\myFolder"); dir.mkdirs();
在上述代码中,我们首先创建了一个 File 对象,然后传入一个字符串类型的参数 “C:\Users\username\Documents\myFolder”,表示要创建的文件夹路径。然后调用 mkdirs() 方法创建该文件夹及其父文件夹。
mkdirs()方法具体是如何获取创建多层目录的?
mkdirs()方法是Java中File类提供的一个方法,用于创建多级目录。
该方法的实现原理是:在创建指定路径的目录时,如果该目录的上级目录不存在,则会先创建上级目录,再创建指定目录。
具体的实现过程可以简单描述为以下几步:
1.将传入的路径分割成各级目录名(使用File.separatorChar分割);
2.从最上级目录开始逐层判断是否存在,如果不存在则创建该目录;
3.重复步骤2,直到所有目录都创建完成。
例如,假设要创建路径为"/a/b/c/d"的目录,而其中的上级目录"a"、“a/b”、"a/b/c"都不存在,则mkdirs方法会按照以下步骤进行创建:分割路径,得到目录名数组:[“”, “a”, “b”, “c”, “d”]
判断目录""是否存在,不存在则创建
判断目录"a"是否存在,不存在则创建
判断目录"a/b"是否存在,不存在则创建
判断目录"a/b/c"是否存在,不存在则创建
判断目录"a/b/c/d"是否存在,不存在则创建
这样就完成了整个路径的创建。
总结
以上就是使用ZipinputStream类解压ZIP文件的介绍,本文仅简单介绍了ZipInputStream流的使用,而ZipInputStream流更多的实战经验仍然需要我们在项目和实践中获取。有拓展或指正的内容欢迎在评论区中留言。