Java中Zip压缩文件的读写及应用(ZipInputStream ZipOutputStream)

什么是ZipInputStream

  1. ZipInputStream类是FilterInputSteram类的子类,具有直接读取Zip文件的内容的功能。
  2. 另一个 JarInputStream类是 ZipInputStream的子类,它增加的主要功能是直接读取 jar 文件里面的 MANIFEST.MF 文件。因为本质 上 jar 包就是 zip 包,只是额外附加了一些固定的描述文件。
  • 如何读取Zip文件

  1. 创建ZipInputStream,首先应当传入一个FileInputStream作为文件源.设定一个循环调用 getNextEntry() ,直到返回 null ,表示 zip 流结束。
  2. 一个 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文件

  1. ZipOutputStream类 是 FilterOutputStream的子类 ,它可以直接写入内容到zip包
  2. 我们要先创建一个 ZipOutputStream ,通常是传入一个 FileOutputStream ,然后,创建一个文件File类型的数组获取并且遍历目录下的子文件。
  3. 每写入一个文件前,先调用 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();
    		}
    	}
    }
    

你可能感兴趣的:(jar,java)