利用java进行zip文件解压缩

利用java进行zip文件解压缩

本文利用Java的zip包中的ZipFile和ZipEntry两个类,获取到压缩包中的所有文件,并将压缩文件通过InputStream写入一个byte数组,再将该byte数组赋值给FileOutputStream中实现压缩文件的解压操作。最后再返回一个包括所有文件绝对路径名的ArrayList

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.Enumeration;
import java.util.zip.ZipEntry;
import java.util.zip.ZipFile;
import java.util.zip.ZipInputStream;

public class FileUtil {	
		public static void main(String[] args) {
			System.out.println("start to compress");
			ArrayList<String> list=GetFile("H:\\remote\\somegit.zip","H:\\remote\\");
		
		}
	   public static ArrayList<String> GetFile(String srcFile,String desDirectory)  {
		  ArrayList<String> directories=new ArrayList<>();
		   File zippedFile=new File(srcFile);
		   try {
		   if(!zippedFile.exists())
			   throw new FileNotFoundException();
		   
		   if(!srcFile.endsWith("zip")) {
			   throw new Exception("文件格式不对");
		   }
		   ZipFile zf=new ZipFile(srcFile);
		   //ZipInputStream zis=new ZipInputStream(new FileInputStream(zippedFile));
		   
		   Enumeration<? extends ZipEntry> zipe=zf.entries();
		   String directory="";
		   String file_name="";
		   while(zipe.hasMoreElements()) {
			   ZipEntry ze=zipe.nextElement();
			   if(directory.endsWith("\\"))
				   directory=desDirectory+ze.getName();
			   else {
			  directory =desDirectory+"\\"+ze.getName();
			   }
			   File f_d=new File(directory);
			   if(ze.isDirectory()) {			  
				  
				  if(!f_d.exists())
					  f_d.mkdirs();
			   }
			   else {		  
				  if(!f_d.exists())
					  f_d.createNewFile();
				   try(InputStream fis=zf.getInputStream(ze);
						   FileOutputStream fos=new FileOutputStream(f_d);){
					   byte[] b_p=new byte[1024];
					   int length=-1;
					   while((length=fis.read(b_p))>0) {
				fos.write(b_p);
					
					   }
					   fos.flush();
					   directories.add(f_d.getAbsolutePath());
					   
				   }
				   catch(Exception e) {
					   e.printStackTrace();
					   return null;
				   }
			   
			   }
			   
			   
		   }
		   String s_file="";
		
		   return directories;
		   }
		   catch(Exception e) {
			   e.printStackTrace();
			   return null;
		   }
	   }
}

一、利用压缩文件名创建一个ZipFile对象,利用ZipFile获取一个Enumeration<? extends ZipEntry>
ZipFile zf=new ZipFile(srcFile);
Enumeration<? extends ZipEntry> zipe=zf.entries()
二、对Enumeration中的每一个zipentry进行操作,如果是文件夹则获取文件夹路径,如果是文件则通过输入流写入byte数组,同时将byte数组的内容写入输出流,并将在本地的文件路径添加到ArrayList当中。

  while(zipe.hasMoreElements()) {
			   ZipEntry ze=zipe.nextElement();
			   if(directory.endsWith("\\"))
				   directory=desDirectory+ze.getName();
			   else {
			  directory =desDirectory+"\\"+ze.getName();
			   }
			   File f_d=new File(directory);
			   if(ze.isDirectory()) {			  
				  
				  if(!f_d.exists())
					  f_d.mkdirs();
			   }
			   else {		  
				  if(!f_d.exists())
					  f_d.createNewFile();
				   try(InputStream fis=zf.getInputStream(ze);
						   FileOutputStream fos=new FileOutputStream(f_d);){
					   byte[] b_p=new byte[1024];
					   int length=-1;
					   while((length=fis.read(b_p))>0) {
				fos.write(b_p);
					
					   }
					   fos.flush();
					   directories.add(f_d.getAbsolutePath());
					   
				   }
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值