java压缩和解压zip

ZipEntry、ZipInputStream和ZipOutputStream三个Java类实现zip数据压缩方式的编程方法。

  zip压缩文件结构:一个zip文件由多个entry组成,每个entry有一个唯一的名称,entry的数据项存储压缩数据

  与zip文件有关的几个Java类
  ・类ZipEntry

  public ZipEntry(String name); 

  name为指定的数据项名。
  ・类ZipOutputStream
  ZipOutputStream实现了zip压缩文件的写输出流,支持压缩和非压缩entry。下面是它的几个函数:

  public ZipOutputStream(OutputStream out);
  ∥利用输出流out构造一个ZIP输出流。
  public void setMethod(int method);
  ∥设置entry压缩方法,缺省值为DEFLATED。
  public void putNextEntry(ZipEntry newe);
  ∥如果当前的entry存在且处于激活状态时,关闭它,在zip文件中写入新的entry-newe
  并将数据流定位于entry数据项的起始位置,压缩方法为setMethod指定的方法。

  ・类ZipInputStream
  ZipInputStream实现了zip压缩文件的读输入流,支持压缩和非压缩entry。下面是它的
  几个函数:

  public ZipInputStream(InputStream in);
  ∥利用输入流in构造一个ZIP输出流。
  public ZipEntry getNextEntry();
  ∥返回ZIP文件中的下一个entry,并将输出流定位在此entry数据项的起始位置。
  public void closeEntry();
  ∥关闭当前的zip entry,并将数据流定位于下一个entry的起始位置。 

 

 

 

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;
import java.util.zip.ZipOutputStream;
import org.junit.Test;
public class ZipDemo {
 public static void main(String[] args) throws Exception {
  //压缩后的容器,压缩到哪
         ZipOutputStream zip = new ZipOutputStream(new FileOutputStream("f:/abc.zip"));
         //一个zip文件由多个entry组成,每个entry有唯一的名称
         ZipEntry en = new ZipEntry("a.txt");
         //ZipEntry en = new ZipEntry("a\\a.txt");可以在里面建文件夹
         zip.putNextEntry(en);
         //要压缩的数据源
         InputStream in= new FileInputStream("f:/a.txt");
         byte[] b = new byte[1024];
         int len =0;
         while((len=in.read(b))!=-1){
          zip.write(b,0,len);
         }
         zip.closeEntry();
        
         en = new ZipEntry("b.txt");
         zip.putNextEntry(en);
         in  = new FileInputStream("f:/b.txt");
         b = new byte[1024];
         len = 0;
         while((len=in.read(b))!=-1){
          zip.write(b, 0, len);
         }
         zip.closeEntry();
         zip.close();
 }
 @Test
 public void jy() throws Exception{
  //ZipFile zf = new ZipFile("f:/abc.zip");
  //解压的数据源
  ZipInputStream zip = new ZipInputStream(new FileInputStream("f:/abc.zip"));
  //从zip中取出Entry
     ZipEntry en = zip.getNextEntry();
   // InputStream in = zf.getInputStream(en);
     byte[] b = new byte[1024];
     int len =0;
     while((len=zip.read(b))!=-1){
      String str = new String(b,0,len);
      System.err.println(str);
     }
 }
}

 

 

 

以下是解压:


 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
实现Java中的Zip文件压缩解压缩操作,可以使用Java提供的ZipInputStream和ZipOutputStream类。下面是一个简单的示例代码,展示如何高效地解压Zip文件: ```java import java.io.*; import java.util.zip.ZipEntry; import java.util.zip.ZipInputStream; public class ZipUtils { public static void unzip(String zipFilePath, String destDirectory) throws IOException { File destDir = new File(destDirectory); if (!destDir.exists()) { destDir.mkdir(); } ZipInputStream zipIn = new ZipInputStream(new FileInputStream(zipFilePath)); ZipEntry entry = zipIn.getNextEntry(); while (entry != null) { String filePath = destDirectory + File.separator + entry.getName(); if (!entry.isDirectory()) { extractFile(zipIn, filePath); } else { File dir = new File(filePath); dir.mkdir(); } zipIn.closeEntry(); entry = zipIn.getNextEntry(); } zipIn.close(); } private static void extractFile(ZipInputStream zipIn, String filePath) throws IOException { BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(filePath)); byte[] bytesIn = new byte[4096]; int read = 0; while ((read = zipIn.read(bytesIn)) != -1) { bos.write(bytesIn, 0, read); } bos.close(); } } ``` 示例代码中的`unzip`方法接收两个参数:`zipFilePath`表示要解压缩的Zip文件的路径,`destDirectory`表示解压缩后的文件存放目录。代码首先创建目标文件夹,然后打开Zip文件并逐个读取其中的ZipEntry,如果是文件解压缩到目标文件夹,如果是目录就创建对应的目录。解压缩过程中使用了`BufferedOutputStream`来提高效率。 要实现Zip文件压缩,可以使用Java提供的ZipEntry和ZipOutputStream类。下面是一个简单的示例代码,展示如何压缩一个文件或目录为Zip文件: ```java import java.io.*; import java.util.zip.ZipEntry; import java.util.zip.ZipOutputStream; public class ZipUtils { public static void zip(String sourceFile, String zipFilePath) throws IOException { FileOutputStream fos = new FileOutputStream(zipFilePath); ZipOutputStream zipOut = new ZipOutputStream(fos); File fileToZip = new File(sourceFile); zipFile(fileToZip, fileToZip.getName(), zipOut); zipOut.close(); fos.close(); } private static void zipFile(File fileToZip, String fileName, ZipOutputStream zipOut) throws IOException { if (fileToZip.isHidden()) { return; } if (fileToZip.isDirectory()) { File[] children = fileToZip.listFiles(); for (File childFile : children) { zipFile(childFile, fileName + "/" + childFile.getName(), zipOut); } return; } FileInputStream fis = new FileInputStream(fileToZip); ZipEntry zipEntry = new ZipEntry(fileName); zipOut.putNextEntry(zipEntry); byte[] bytes = new byte[1024]; int length; while ((length = fis.read(bytes)) >= 0) { zipOut.write(bytes, 0, length); } fis.close(); } } ``` 示例代码中的`zip`方法接收两个参数:`sourceFile`表示要压缩文件或目录的路径,`zipFilePath`表示压缩后的Zip文件路径。代码首先创建ZipOutputStream并打开输出文件,然后递归地压缩文件或目录中的所有文件,最后关闭输出流。压缩过程中使用了`FileInputStream`和`ZipEntry`来逐个读取文件并写入Zip文件中。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值