什么是ZipInputStream
- ZipInputStream类是FilterInputSteram类的子类,具有直接读取Zip文件的内容的功能。
- 另一个 JarInputStream类是 ZipInputStream的子类,它增加的主要功能是直接读取 jar 文件里面的 MANIFEST.MF 文件。因为本质 上 jar 包就是 zip 包,只是额外附加了一些固定的描述文件。
-
如何读取Zip文件
- 创建ZipInputStream,首先应当传入一个FileInputStream作为文件源.设定一个循环调用 getNextEntry() ,直到返回 null ,表示 zip 流结束。
- 一个 ZipEntry 表示一个压缩文件或目录,如果是压缩文件,我们就用 read() 方法不断读取,直到返回 -1。 -1代表结束。
-
package com.my.hyz3; 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 Demo02 { public static void main(String[] args) { try (ZipInputStream in = new ZipInputStream(new FileInputStream("d:\\tupian11\\213js.zip"),Charset.forName("gbk"))) { ZipEntry ze = null; while((ze=in.getNextEntry())!=null) { System.out.println(ze.getName());//输出得到的文件名称 System.out.println(ze.getSize());//输出文件的逻辑大小 System.out.println(ze.getCompressedSize());//输出文件在磁盘上占用的直接数 } } catch (IOException e) { e.printStackTrace(); } } }
如何写入Zip文件
- ZipOutputStream类 是 FilterOutputStream的子类 ,它可以直接写入内容到zip包。
- 我们要先创建一个 ZipOutputStream ,通常是传入一个 FileOutputStream ,然后,创建一个文件File类型的数组获取并且遍历目录下的子文件。
- 每写入一个文件前,先调用 putNextEntry() ,然后用 write() 写入 byte[] 数据,写入完毕后调用 closeEntry() 结束这个文件的打包。
-
package com.my.hyz4; 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) { //将原始目录中的文件,写入"Zip"压缩文件 File rootdir = new File("d:\\tupian"); 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())); //写入压缩包 out.write(Files.readAllBytes(f.toPath())); out.closeEntry();//结束当前zipentry } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }