java中实现zip的压缩与解压缩。java自带的 能实现的功能比较有限。

本程序功能:实现简单的压缩和解压缩,压缩文件夹下的所有文件(文件过滤的话需要对File进一步细节处理)。

对中文的支持需要使用java7或java8,可以在ZipOutputStream和ZipInputStream中指定Charset参数,详见API中的构造参数。

1.压缩文件或文件夹

  1. public void zip() throws IOException {
  2. File fileSrc = new File("E:\\abc");
  3. File destFile = new File("E:\\abc.zip");
  4. zip(fileSrc,destFile);
  5. }
  1. public void zip(File fileSrc,File dectFile) throws IOException {
  2. ZipOutputStream zipOutputStream = new ZipOutputStream(new CheckedOutputStream(new FileOutputStream(dectFile),new CRC32()));
  3. String name = fileSrc.getName();
  4. zip(zipOutputStream, name,fileSrc);
  5. zipOutputStream.flush();
  6. zipOutputStream.close();
  7. }

zip

  1. private void zip(ZipOutputStream zipOutputStream,String name, File fileSrc) throws IOException {
  2. if (fileSrc.isDirectory()) {
  3. File[] files = fileSrc.listFiles(new FilenameFilter() { //过滤文件
  4. Pattern pattern = Pattern.compile(".+");//所有文件,正则表达式
  5. @Override
  6. public boolean accept(File dir, String name) {
  7. return pattern.matcher(name).matches();
  8. }
  9. });
  10. zipOutputStream.putNextEntry(new ZipEntry(name+"/")); // 建一个文件夹
  11. name = name+"/";
  12. for (File f : files) {
  13. zip(zipOutputStream,name+f.getName(),f);
  14. }
  15. }else {
  16.  
  17. zipOutputStream.putNextEntry(new ZipEntry(name));
  18. FileInputStream input = new FileInputStream(fileSrc);
  19. byte[] buf = new byte[1024];
  20. int len = -1;
  21. while ((len = input.read(buf)) != -1) {
  22. zipOutputStream.write(buf, 0, len);
  23. }
  24. zipOutputStream.flush();
  25. input.close();
  26. }
  27. }

zip

2.解压缩zip文件

  1. public void unzip() throws IOException {
  2. File zipFile = new File("E:\\java.zip");
  3. String destDir = "E:\\java\\";
  4. unzip(zipFile,destDir);
  5. }
  1. private void unzip(File zipFile, String destDir) throws IOException {
  2. ZipInputStream zipInputStream = new ZipInputStream(new CheckedInputStream(new FileInputStream(zipFile),new CRC32()));
  3. ZipEntry zipEntry;
  4. while ((zipEntry = zipInputStream.getNextEntry()) != null) {
  5. System.out.println(zipEntry.getName());
  6. File f = new File(destDir + zipEntry.getName());
  7. if(zipEntry.getName().endsWith("/")){
  8. f.mkdirs();
  9. }else {
  10. // f.createNewFile();
  11. FileOutputStream fileOutputStream = new FileOutputStream(f);
  12. byte[] buf = new byte[1024];
  13. int len = -1;
  14. while ((len = zipInputStream.read(buf)) != -1) { // 直到读到该条目的结尾
  15. fileOutputStream.write(buf, 0, len);
  16. }
  17. fileOutputStream.flush();
  18. fileOutputStream.close();
  19. }
  20. zipInputStream.closeEntry(); //关闭该条目
  21. }
  22. zipInputStream.close();
  23. }

unzip

java ZipOutputStream压缩文件,ZipInputStream解压缩的更多相关文章

  1. Java实现压缩文件与解压缩文件

    由于工作需要,需要将zip的压缩文件进行解压,经过调查发现,存在两个开源的工具包,一个是Apache的ant工具包,另一个就是Java api自带的工具包:但是Java自带的工具包存在问题:如果压缩或 ...

  2. java ZIP压缩文件

    问题描述:     使用java ZIP压缩文件和目录 问题解决:     (1)单个文件压缩 注:     以上是实现单个文件写入压缩包的代码,注意其中主要是在ZipOutStream流对象中创建Z ...

  3. Java生成压缩文件(zip、rar 格式)

    jar坐标: <dependency> <groupId>org.apache.ant</groupId> <artifactId>ant</ar ...

  4. java生成压缩文件

    在工作过程中,需要将一个文件夹生成压缩文件,然后提供给用户下载.所以自己写了一个压缩文件的工具类.该工具类支持单个文件和文件夹压缩.放代码: import java.io.BufferedOutput ...

  5. java zip 压缩文件

    zip压缩:ZipOutputStream.ZipFile.ZipInputStream 三个类的作用 一段 java  zip  压缩的代码: File dir = new File("C ...

  6. java打包压缩文件

    package com.it.simple.util; import java.io.BufferedOutputStream;import java.io.ByteArrayOutputStream ...

  7. java zip压缩文件和文件夹

    public class FileUtil { /** * 压缩文件-File * @param out zip流 * @param srcFiles 要压缩的文件 * @param path 相对路 ...

  8. java对压缩文件进行加密,winrar和好压 直接输入解密密码来使用

    <!-- https://mvnrepository.com/artifact/net.lingala.zip4j/zip4j --> <dependency> <gro ...

  9. Java读取压缩文件信息

    不解压压缩文件,获取其中包含的文件,通过文件名检查是否包含非法文件.(后续再根据文件头或内容吧) zip: import java.util.zip.ZipEntry;import java.util ...

随机推荐

  1. ACE bus

    ACE bus增加的内容: 1):5状态的cache model 2):关于coherency的additional signal 3):两个cache master访问shared cache的ad ...

  2. [osx] android studio下修改avd的hosts文件

    1. 启动avd 安装/启动avd就不说啦,可以直接在android studio里面操作的 2. 进入adb目录 当然是打开终端来敲命令啦. cd /Users/birdylee/Library/A ...

  3. Oracle数据库学习笔记

    创建表的同时插入数据:create table zhang3 as select * from zhang1;create table zhang3(id,name) as select * from ...

  4. UVA 10054 the necklace 欧拉回路

    有n个珠子,每颗珠子有左右两边两种颜色,颜色有1~50种,问你能不能把这些珠子按照相接的地方颜色相同串成一个环. 可以认为有50个点,用n条边它们相连,问你能不能找出包含所有边的欧拉回路 首先判断是否 ...

  5. ios学习-控制按钮图片的走动和变换

    一.项目要求:制作一个界面,通过点击按钮来控制头像(按钮)向上,向下,向左,向右移动,可以左旋转,右旋转,以及放大和缩小. 二.开发步骤: 1.通过拖动按钮到storyboard搭建UI界面(后面会写 ...

  6. C#:获取环境信息

    外部环境数据1.需要管理员权限2.需要安装office2003以上完整版3.需要安装flash reader 10.0以上4.需要安装adodb reader;Adobe Acrobat X Pro; ...

  7. CAS 集群部署session共享配置

    背景 前段时间,项目计划搞独立的登录鉴权中心,由于单独开发一套稳定的登录.鉴权代码,工作量大,最终的方案是对开源鉴权中心CAS(Central Authentication Service)作适配修改 ...

  8. 《机器学习实战》学习笔记一K邻近算法

     一. K邻近算法思想:存在一个样本数据集合,称为训练样本集,并且每个数据都存在标签,即我们知道样本集中每一数据(这里的数据是一组数据,可以是n维向量)与所属分类的对应关系.输入没有标签的新数据后,将 ...

  9. Organize Your Train part II-POJ3007模拟

    Organize Your Train part II Time Limit: 1000MS Memory Limit: 65536K Description RJ Freight, a Japane ...

  10. 模板——Tarjan

    #include <cstdio> #include <cstring> #include <iostream> #include <vector> u ...