java 大数据(压缩和解压) 整理

package com;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;
import java.util.zip.ZipOutputStream;

import org.junit.jupiter.api.Test;

public class TestJyZip {

	/**
	 * 循环向zos中添加条目
	 */
	public static void addFile(ZipOutputStream zos,String path) throws Exception{
		//动态获取文件名称
		File f =new File(path);
		//构建一个新条目,“3.png” 只是个名字
		zos.putNextEntry(new ZipEntry(f.getName()));
		//快速读取文件流,输入流
		FileInputStream fis =new FileInputStream(path);
		//定义字节
		byte[] bytes = new byte[fis.available()];
		//写入bytes字节
		fis.read(bytes);
		//关闭输入流
		fis.close();
		//写入字节数据
		zos.write(bytes);
		//关闭条目流
		zos.closeEntry();		
	}
	
	/**
	 * 压缩文件
	 * @throws Exception 
	 */
	@Test
	public static void znzip() throws Exception {
		//文件输出流
		FileOutputStream fos = new FileOutputStream("E:/img/xx.zip"); 
		//压缩流
		ZipOutputStream zos = new ZipOutputStream(fos);
		//字符串数组
		String[] arr= {"E:/img/1.txt","E:/img/2.jpg"};
		
		for(String s :arr) {
			addFile(zos,s);
		}
		//关闭压缩流
		zos.close();
		//关闭文件输出流
		fos.close();
		System.out.println("压缩文件-执行完毕");
	}
	
	
	/**
	 * 解压缩
	 */
	@Test
  public void unzip() throws Exception{
	  //文件输入流
	  FileInputStream fis = new FileInputStream("E:/img/xx.zip");
	  //压缩输入流
	  ZipInputStream zis =new ZipInputStream(fis);
	  ZipEntry entry=null;
	  byte[] buf=new byte[1024];
	  int len =0;
	  while ((entry=zis.getNextEntry()) != null) {
		//获取文件名称
		String name = entry.getName();
		FileOutputStream fos =new FileOutputStream("E:/img/unzip/"+name);
		//判断字节最后一位
		while((len = zis.read(buf))!=-1) {
			fos.write(buf,0,len);
		}
		//关闭流
		fos.close();
		
	}
	//关闭流
	  zis.close();
	  fis.close();
	  System.out.println("解压文件-执行完毕");
  }
}

效果图

 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值