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

ZipEntry实现文件解压缩与目录解压缩在使用 zip 格式压缩 解压缩时 压缩可以使用 ZipEntry 类和 ZipOutPutStr 类 解压缩可以使用 ZipEntry 类和 ZipInPutStre 类 文件压缩 files 要压

大家好,欢迎来到IT知识分享网。

在使用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(); } } 

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/112171.html

(0)
上一篇 2026-01-20 10:33
下一篇 2026-01-20 11:01

相关推荐

发表回复

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

关注微信