java 解压zip 文件

本文介绍了一个使用Java实现的批量解压ZIP文件的方法,并在解压完成后删除原始ZIP文件。该程序能够递归地遍历指定目录及其子目录下的所有ZIP文件。

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.zip.ZipEntry;
import java.util.zip.ZipFile;
import java.util.zip.ZipInputStream;
public class ZipTool {
 
 public static void main(String[] args) {
  //F:/test1  为需要解压文件的根目录
  traversDir("F:/test1");
 }

 /**
  * 递归解压根目录下zip文件,解压后删除zip文件。
  * @param filename
  */
 public static void traversDir(String filename) {
  File file = new File(filename);
  if (file != null) {
   if (file.isDirectory() && file.list().length != 0) {
    for (int i = 0; i < file.list().length; i++) {
     File f = file.listFiles()[i];
     if (!f.isDirectory() && f.getName().endsWith(".zip")) {
      System.out.println(f.getPath());
      System.out.println(f.getParent());
      try {
       //解压文件 方法
       unZip(f.getPath());

       //解压后删除文件 begin
       File deFile = new File(f.getPath());
       if (f.exists()) {
        boolean flag = f.delete();
        if (flag) {
         System.out.println(f.getPath()
           + " file delete sucess!");
        } else {
         System.out.println(f.getPath()
           + " file delete fail!");
        }
       }
       //解压后删除文件 end
      } catch (Exception e) {

      }
     } else {
      traversDir(f.toString());
     }
    }
   }

  }
 }

 /**
  * 解压文件的方法
  * @param path
  * @throws IOException
  */
 public static void unZip(String path) throws IOException {
  File file = new File(path);//压缩文件 
  String savePath = file.getParent();

  ZipFile zipFile = new ZipFile(file);//实例化ZipFile,每一个zip压缩文件都可以表示为一个ZipFile 

  //实例化一个Zip压缩文件的ZipInputStream对象,可以利用该类的getNextEntry()方法依次拿到每一个ZipEntry对象 
  FileInputStream fileInputStream = new FileInputStream(file);
  ZipInputStream zipInputStream = new ZipInputStream(fileInputStream);

  ZipEntry zipEntry = null;

  while ((zipEntry = zipInputStream.getNextEntry()) != null) {

   String fileName = zipEntry.getName();

   File temp = new File(savePath + "\\" + fileName);

   if (!temp.getParentFile().exists())

    temp.getParentFile().mkdirs();

   OutputStream os = new FileOutputStream(temp);

   //通过ZipFile的getInputStream方法拿到具体的ZipEntry的输入流 

   InputStream is = zipFile.getInputStream(zipEntry);

   int len = 0;

   while ((len = is.read()) != -1) {
    os.write(len);
   }
   os.close();

   is.close();

  }
  // 关闭文件流
  zipInputStream.close();
  fileInputStream.close();
  zipFile.close(); //zipFile 文件流关闭, 如果缺少这语句, 在后续的删除文件 会失败,无法删除文件

 }
}

转载于:https://www.cnblogs.com/edison2012/archive/2012/12/20/2826536.html

### 使用Java解压ZIP文件 为了实现ZIP文件解压缩,可以依赖于`java.util.zip`包中的类。以下是基于此包的一个简单例子,该程序能够遍历指定路径下的所有条目并将其提取到目标目录下。 ```java import java.io.*; import java.nio.file.*; import java.util.zip.*; public class UnzipExample { public static void unzip(String zipFilePath, String destDir) throws IOException { File dir = new File(destDir); // 如果目的地不存在,则创建它 if (!dir.exists()) dir.mkdirs(); try (ZipInputStream zis = new ZipInputStream(new FileInputStream(zipFilePath))) { ZipEntry ze; while ((ze = zis.getNextEntry()) != null) { Path newPath = Paths.get(destDir, ze.getName()); if (ze.isDirectory()) { Files.createDirectories(newPath); } else { // 创建父级文件夹(如果尚不存在) Files.createDirectories(newPath.getParent()); // 将数据写入新文件中 Files.copy(zis, newPath, StandardCopyOption.REPLACE_EXISTING); } zis.closeEntry(); } } } public static void main(String[] args) { try { unzip("example.zip", "./output"); System.out.println("Unzipped successfully."); } catch (IOException e) { e.printStackTrace(); } } } ``` 这段代码展示了如何使用`ZipInputStream`读取ZIP存档的内容,并通过循环访问每一个条目(`ZipEntry`)来决定是创建子目录还是保存实际的数据文件[^1]。对于每个非目录项,先确保其所在的上级目录存在再执行复制操作,这样即使ZIP中有复杂的嵌套结构也能被正确还原。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值