java.util.zip 的解压和压缩文件夹

 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.io.InputStream;
import java.util.Enumeration;
import java.util.zip.ZipEntry;
import java.util.zip.ZipException;
import java.util.zip.ZipFile;
import java.util.zip.ZipOutputStream;

public class Zip {
  public static final int BUFFER = 2048;
  private byte[] data = new byte[BUFFER];
  private static ZipOutputStream zos = null;
  private BufferedInputStream bis = null;
  private BufferedOutputStream bos = null;
  private Enumeration<ZipEntry> entries = null;
    public static void main(String[] args) throws IOException{
      String s = "D://dingjing";
      //String s = "D://2.txt";
        File f = new File(s);
        Zip zip = new Zip();
        zip.zip(f);
        s = "dingjing.zip";
        zip.unzip(new File(s));
    }

    public void zip(File file) throws IOException {
        File zipFile = new File(file.getName() + ".zip");
        zos = new ZipOutputStream(new FileOutputStream(zipFile));
        realZip(file, zos);
        zos.close();
    }
    public void realZip(File file,ZipOutputStream zos) throws IOException {
        if (file.isDirectory()) {
         //file.getPath().substring(3): 去除盘符
            zos.putNextEntry(new ZipEntry(file.getPath().substring(3) + "/"));
            zos.closeEntry();
            File[] files = file.listFiles();
            if (files.length == 0) {
                return;
            } else {
                   for (File f : files) {
                       System.out.println(f.getPath());
                       if (f.isDirectory()) {
                           realZip(f, zos);
                       } else {
                           handleZip(f, zos);
                       }
                   }
            }

        } else {
               handleZip(file, zos);
        }
    }

    public void handleZip(File f, ZipOutputStream zos) {
        try {
            bis = new BufferedInputStream(new FileInputStream(f));
            zos.putNextEntry(new ZipEntry(f.getPath().substring(3)));
            int count = -1;
            while((count = bis.read(data, 0, BUFFER)) != -1) {
                zos.write(data, 0, count);
            }
            bis.close();
            zos.closeEntry();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    public void unzip(File file) {
     ZipFile zf;
  try {
   zf = new ZipFile(file);
    entries = (Enumeration<ZipEntry>)zf.entries();
    while(entries.hasMoreElements()) {
     ZipEntry entry = entries.nextElement();
     if (entry.isDirectory()) {
      System.out.println("create dir: " + entry.getName());
      new File(entry.getName()).mkdirs();
      continue;
     } else {
      bos = new BufferedOutputStream(new FileOutputStream(new File(entry.getName()).getPath()));
      handleUnZip(zf.getInputStream(entry), bos);
     }
    }
  } catch (ZipException e) {
   e.printStackTrace();
  } catch (IOException e) {
   e.printStackTrace();
  }
    }
    public void handleUnZip(InputStream is, BufferedOutputStream bos) {
     int count;
     try {
   while( (count = is.read(data, 0, BUFFER)) != -1) {
    bos.write(data, 0, count);
   }
  } catch (IOException e) {
   e.printStackTrace();
  } finally {
   try {
    bos.close();
   } catch (IOException e) {
    e.printStackTrace();
   }
  }
    }
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java中,可以使用`java.util.zip`包来解压缩文件。下面是一个简单的示例代码来解压zip文件: ```java import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException;import java.util.zip.ZipEntry; import java.util.zip.ZipInputStream; public class UnzipFolder { public static void main(String[] args) { String zipFilePath = "path/to/your/zip/file.zip"; String destDir = "path/to/destination/folder"; try { unzip(zipFilePath, destDir); System.out.println("解压缩完成!"); } catch (IOException e) { e.printStackTrace(); } } public static void unzip(String zipFilePath, String destDir) throws IOException { File dir = new File(destDir); // 创建目标文件 if (!dir.exists()) { dir.mkdirs(); } FileInputStream fis = new FileInputStream(zipFilePath); ZipInputStream zipIn = new ZipInputStream(fis); ZipEntry entry = zipIn.getNextEntry(); while (entry != null) { String filePath = destDir + File.separator + entry.getName(); if (!entry.isDirectory()) { // 如果是文件,创建父目录并写入文件 extractFile(zipIn, filePath); } else { // 如果是文件,创建文件 File dirToCreate = new File(filePath); dirToCreate.mkdirs(); } zipIn.closeEntry(); entry = zipIn.getNextEntry(); } zipIn.close(); fis.close(); } private static void extractFile(ZipInputStream zipIn, String filePath) throws IOException { byte[] buffer = new byte[1024]; File outFile = new File(filePath); // 创建父目录 outFile.getParentFile().mkdirs(); FileOutputStream fos = new FileOutputStream(outFile); int length; while ((length = zipIn.read(buffer)) > 0) { fos.write(buffer, 0, length); } fos.close(); } } ``` 上述代码中,`zipFilePath`是要解压缩的zip文件的路径,`destDir`是解压缩后的目标文件路径。你可以根据实际情况修改这两个变量的值。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值