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