栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

2021-11-07

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

2021-11-07

利用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 list=GetFile("H:\remote\somegit.zip","H:\remote\");
		
		}
	   public static ArrayList GetFile(String srcFile,String desDirectory)  {
		  ArrayList 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 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
ZipFile zf=new ZipFile(srcFile);
Enumeration 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());
					   
				   }
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/439894.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号