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

ZipEntry实现文件解压缩与目录解压缩在使用 zip 格式压缩 解压缩时 压缩可以使用 ZipEntry 类和 ZipOutPutStr 类 解压缩可以使用 ZipEntry 类和 ZipInPutStre 类 ZipEntry 对象 结尾 则为文件夹 否则为文件 package com web test import java io

大家好,我是讯享网,很高兴认识大家。

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

讯享网
小讯
上一篇 2025-03-09 14:52
下一篇 2025-02-11 16:28

相关推荐

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