GZIP/ZIP压缩与解压缩

1. 用GZIP类可进行单文件的压缩及压缩包内容的读取

package cn.yjq.interview;

import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.zip.GZIPInputStream;
import java.util.zip.GZIPOutputStream;

import org.junit.Test;

public class GZIPcompress {
	@Test
	public void test1() {
		String path = System.getProperty("user.dir")+"\\src\\cn\\yjq\\interview\\GZIPcompress.java";
		try {
			compress(path, "test.gz");
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
	
	//单文件压缩,将内存中数据写入文件并压缩
	//压缩文件后缀为.gz
	//无法为gz压缩包内的文件取名,默认为.gz的前缀
	public static void compress(String fileName, String gzipName) throws IOException {
		//读文件内容
		BufferedReader br = new BufferedReader(new FileReader(fileName));
		
		//将内存数据写入压缩包
		OutputStreamWriter out = new OutputStreamWriter(
				new GZIPOutputStream(new FileOutputStream(gzipName)));
		String temp = null;
		while((temp=br.readLine()) != null) {
			out.write(temp+"\r\n");
		}
		out.close();
		br.close();
		
		//读压缩包内容
		BufferedReader br2 = new BufferedReader(
				new InputStreamReader(new GZIPInputStream(new FileInputStream(gzipName))));
		while((temp=br2.readLine()) != null) {
			System.out.println(temp);
		}
		br2.close();
	}
	
}
a)生成的压缩包如下:

2. 用ZIP类进行多文件的压缩及压缩包内容的读取
@Test
	public void test2() {
		String file1 = System.getProperty("user.dir")+"\\src\\cn\\yjq\\interview\\GZIPcompress.java";
		String file2 = System.getProperty("user.dir")+"\\src\\cn\\yjq\\interview\\BufferInputFile.java";
		String file3 = System.getProperty("user.dir")+"\\src\\cn\\yjq\\interview\\ViewBuffers.java";
		try {
			zigCompress("test.zip", new String[] {file1, file2, file3});
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
	
	public static void zigCompress(String zipName, String... files) throws IOException {
		ZipOutputStream zos = new ZipOutputStream(new CheckedOutputStream(
				new FileOutputStream(zipName), new Adler32()));
		OutputStreamWriter out = new OutputStreamWriter(zos);
		zos.setComment("hello zip");
		
		//读文件到内存,并写入zip包
		for(String file : files) {
			BufferedReader in = new BufferedReader(new FileReader(file));
			zos.putNextEntry(new ZipEntry(file.substring(file.lastIndexOf("\\")+1)));
			String temp = null;
			while((temp=in.readLine()) != null) {
				out.write(temp+"\r\n");
			}
			in.close();
			out.flush();
		}
		out.close();
		
		//读zip包中所有文件到内存
		ZipInputStream ios = new ZipInputStream(new CheckedInputStream(
				new FileInputStream(zipName), new Adler32()));
		BufferedReader br2 = new BufferedReader(new InputStreamReader(ios));
		ZipEntry ze;
		String temp;
		while((ze=ios.getNextEntry()) != null) {
			System.out.println("----fileName: " + ze.getName() + "----");
			while((temp=br2.readLine()) != null) {
				System.out.println(temp);
			}
		}
		
	}
a)生成的压缩包如下:


3. apache对zip做了封装,无法下载jar,就不测试了

a) 包:ant.jar

b)类: org.apache.tools.zip.ZipOutputStream;

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值