ZipEntry实现文件解压缩与目录解压缩

ZipEntry实现文件解压缩与目录解压缩在使用zip格式压缩、解压缩时,压缩可以使用ZipEntry类和ZipOutPutStream类;解压缩可以使用ZipEntry类和ZipInPutStream类/**文件压缩*files:要压缩的文件,以文件名数组的形式传参*destZip:压缩之后zip文件所存在的目录,需要”D:\\”或”D:\\test\”格式**/p

ZipEntry实现文件解压缩与目录解压缩"

在使用zip格式压缩、解压缩时, 压缩可以使用ZipEntry类和ZipOutPutStream类;解压缩可以使用ZipEntry类和ZipInPutStream类

ZipEntry对象:“/”结尾,则为文件夹,否则为文件。

package com.web.test;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;
import java.util.zip.ZipOutputStream;

public class TestZiP { 
   
	

	/* * 文件压缩 * files:要压缩的文件,以文件名数组的形式传参 * destZip:压缩之后zip文件所存在的目录,需要"D:\\"或"D:\\test\"格式 * */
	public static void zip(String[] files,String destZip){ 
   
		
		FileOutputStream fos =  new FileOutputStream(destZip);
		BufferedOutputStream bos = new BufferedOutputStream(fos);
		ZipOutputStream zos = new ZipOutputStream(bos);
		
		/*循环读取文件,压缩到zip中*/
		BufferedInputStream bis = null;
		FileInputStream fis = null;
		try { 
   
			for (int i = 0; i < files.length; i++) { 
   
				
				String file = files[i];
				
				fis = new FileInputStream(file);
				bis = new BufferedInputStream(fis);
				/*获取文件名,创建条目并添加到zip中*/
				File f = new File(file);
				ZipEntry z1 = new ZipEntry(f.getName());
				zos.putNextEntry(z1);
				/*读取文件中的字节信息,压入条目*/
				int tmp = -1;
				while((tmp = bis.read()) != -1){ 
   
					/*写入到目标zip中*/
					zos.write(tmp);
				}
				//todo 这里要关闭流哦
			}
		} catch (IOException e) { 
   
			e.printStackTrace();
		}finally{ 
   
			try { 
   
				zos.closeEntry();
			} catch (IOException e) { 
   
				e.printStackTrace();
			}
			try { 
   
				bis.close();
			} catch (IOException e) { 
   
				e.printStackTrace();
			}
			try { 
   
				fis.close();
			} catch (IOException e) { 
   
				e.printStackTrace();
			}
		}	
			try { 
   
				zos.close();
			} catch (IOException e) { 
   
				e.printStackTrace();
			}
			try { 
   
				bos.close();
			} catch (IOException e) { 
   
				e.printStackTrace();
			}
			try { 
   
				fos.close();
			} catch (IOException e) { 
   
				e.printStackTrace();
			}
	}	
	
	/* * 文件解压缩 * zipfile:要解压缩的zip文件 * destpath:解压后文件所放的目录,需要"D:\\"或"D:\\test\"格式 * */
	public static void unzip(String zipfile,String destpath) throws FileNotFoundException,IOException{ 
   
		/* String zipfile = "C:\\Users\\shitb\\Desktop\\jacob_1.9.zip"; String destpath = "D:\\test\\"; */
		FileInputStream fis = new FileInputStream(zipfile);
		ZipInputStream zis = new ZipInputStream(fis);
		ZipEntry z1 = null;
		
		while((z1 = zis.getNextEntry()) != null){ 
   
			if (z1.isDirectory()) { 
   
				File f = new File("D:\\"+z1.getName());
				f.mkdirs();
			}else { 
   
				String fileName = z1.getName();
				FileOutputStream fos = new FileOutputStream(destpath+fileName);
				int tmp = -1;
				while((tmp = zis.read()) != -1){ 
   
					/*写入到目标文件中*/
					fos.write(tmp);
				}
				zis.closeEntry();
				fos.close();
			}
		}
		zis.close();
	}
	
	/* * 目录压缩 * zipFileName:压缩后zip文件的路径 * inputFile:需要压缩的源目录; * */
	public void zip(String zipFileName,String inputFile) throws IOException{ 
   
		
		File file = new File(inputFile);
		
		FileOutputStream fos = new FileOutputStream(zipFileName);
		ZipOutputStream out = new ZipOutputStream(fos);
		zipDir(out,file,"");
		out.close();
	}
	/* *递归遍历子目录和文件,进行压缩 * */
	private void zipDir(ZipOutputStream out, File file, String base) throws IOException { 
   
		
		if (file.isDirectory()) { 
   
			File[] files = file.listFiles();
			out.putNextEntry(new ZipEntry(base+"/"));
			base = base.length()==0?"":base+"/";
			for (int i = 0; i < files.length; i++) { 
   
				/*进行递归*/
				zipDir(out,files[i], base+files[i].getName());
			}
		}else { 
   
			out.putNextEntry(new ZipEntry(base));
			FileInputStream fis = new FileInputStream(file);
			
			int len = 0;
			while((len = fis.read()) != -1){ 
   
				/*写入到目标zip中*/
				out.write(len);
			}
			fis.close();
		}
	}
	/* * 解压缩目录 * zipFileName:需要解压缩的zip文件 * outputDirectory:解压缩后文件所放路径 * */
	public void unzipDir(String zipFileName,String outputDirectory) throws IOException{ 
   
		
		FileInputStream fis = new FileInputStream(zipFileName);
		ZipInputStream zis = new ZipInputStream(fis);
		
		ZipEntry zipEntry;
		
		while((zipEntry = zis.getNextEntry()) != null){ 
   
			if (zipEntry.isDirectory()) { 
   
				String name = zipEntry.getName();
				name = name.substring(0,name.length()-1);
				File f = new File(outputDirectory+File.separator+name);
				f.mkdir();
			}else { 
   
				File f = new File(outputDirectory+File.separator+zipEntry.getName());
				f.createNewFile();
				FileOutputStream fos = new FileOutputStream(f);
				
				int len = 0;
				while((len = zis.read()) != -1){ 
   
					/*写入到目标文件中*/
					fos.write(len);
				}
				fos.close();
			}
		}
		zis.close();
	}
}

今天的文章ZipEntry实现文件解压缩与目录解压缩分享到此就结束了,感谢您的阅读,如果确实帮到您,您可以动动手指转发给其他人。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/29960.html

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注