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("解壓文件-執行完畢");
  }
}

效果圖

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章