使用GZIPOutputStream和GZIPInputStream进行压缩解压文件

         最近的项目需要对一个.gz文件解压,刚好java api提供了GZIPInputStream这样的类,顺便也简单学习了GZIPOutputStream类提供的压缩gz的方法。写了两个函数分别可以实现压缩和解压的方法。实现的原理很简单,以解压为例,首先用字节数组获得gz文件的输入流,再将字节数组的内容写到目标文件的输出流即可。不过目前只能对单个文件进行压缩和解压,多个文件的工作还没有做。欢迎大家讨论方法的正确性。


public static void main(String []args) throws IOException{
		File toZipFile = new File(TOZIP_FILE_PATH);
		File mediumFile = new File(ZIPPED_FILE_PATH);
		File toUnzipFile = new File(TOUNZIP_FILE_PATH);
		gzipFile(toZipFile,mediumFile);
		ungzipFile(mediumFile,toUnzipFile);		
		}
	
	public static void ungzipFile(File srcFile,File desFile){
		FileInputStream is;
		FileOutputStream os;
		InputStream gzis;
		final int MAX_BYTE = 1024*1000;
		int len = 0;
		byte [] b = new byte[MAX_BYTE];
		try {
			is = new FileInputStream(srcFile);
			os = new FileOutputStream(desFile);
			try {
				gzis = new GZIPInputStream(is);
				while((len = gzis.read(b))!=-1)
					os.write(b,0,len);
				os.flush();
				gzis.close();
				os.close();
				is.close();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		srcFile.delete();
	}
	
	public static void gzipFile(File srcFile,File desFile){
		
		FileInputStream fis;
		FileOutputStream fos;
		GZIPOutputStream gzos;
		
		final int MAX_BYTE = 1024*1000;
		int len = 0;
		byte [] b = new byte[MAX_BYTE];
		
		try {
			fis = new FileInputStream(srcFile);
			fos = new FileOutputStream(desFile);
			gzos = new GZIPOutputStream(fos);
			while((len = fis.read(b))!=-1)
				gzos.write(b,0,len);
			gzos.flush();
			gzos.close();
			fos.close();
			fis.close();
		} catch (IOException e1) {
			e1.printStackTrace();
		}	



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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值