package zipfile;

//java.util.zip包提供了数据压缩和解压缩的类
import java.io.*;
import java.util.zip.*;
public class Zip{
 static final int BUFFER = 2048;
 static boolean flag = false;
 public static void main(String args[]) throws IOException{
  File file = new File(args[0]);
  FileInputStream file1 = new FileInputStream(ZipSubdirectory(file));
 }
 // ZipSubdirectory函数将一个指定目录(包括它子目录)压缩成一个同名压缩文件(这里称为"ORIGIN")
 public static File ZipSubdirectory(File myDir) throws IOException{
  // 创建缓冲输入流BufferedInputStream
  BufferedInputStream origin = null;
  // 创建ZipOutputStream对象,将向它传递希望写入文件的输出流
  File zipFile = new File(myDir.getName() + ".zip");
  FileOutputStream fos = new FileOutputStream(zipFile);
  ZipOutputStream out = new ZipOutputStream(new BufferedOutputStream(fos,
    BUFFER));
  // dirContents[]获取当前目录(myDir)所有文件对象(包括子目录名)
  File dirContents[] = myDir.listFiles();
  // 创建临时文件tempFile,使用后删除
  File tempFile = null;
  try{
   // 处理当前目录所有文件对象,包括子目录
   for(int i = 0;i < dirContents.length;i++){
    // 使用递归方法将当前目录的子目录转成一个ZIP文件,并作为一个ENTRY加进"ORIGIN"
    if(dirContents[i].isDirectory()){
     tempFile = ZipSubdirectory(dirContents[i]);
     flag = true;
    }
    // 如果当前文件不是子目录
    else{
     tempFile = dirContents[i];
     // flag标记tempFile是否由子目录压缩成的ZIP文件
     flag = false;
    }
    System.out.println("Compress file: " + tempFile.getName());
    FileInputStream fis = new FileInputStream(tempFile);
    origin = new BufferedInputStream(fis, BUFFER);
    // 为被读取的文件创建压缩条目
    ZipEntry entry = new ZipEntry(tempFile.getName());
    byte data[] = new byte[BUFFER];
    int count;
    // 在向ZIP输出流写入数据之前,必须首先使用out.putNextEntry(entry); 方法安置压缩条目对象
    out.putNextEntry(entry);
    // 向ZIP 文件写入数据
    while((count = origin.read(data, 0, BUFFER)) != -1){
     out.write(data, 0, count);
    }
    // 关闭输入流
    origin.close();
    // tempFile是临时生成的ZIP文件,删除它
    if(flag == true){
     flag = tempFile.delete();
     System.out.println("Delete file:" + tempFile.getName()+" "
       + flag);
    }
   }
  }catch(Exception e){
   System.out.println(e);
  }
  // 递归返回
  out.close();
  return zipFile;
 }
}

转载于:https://www.cnblogs.com/CUCmehp/archive/2008/10/26/1320028.html

Java创建Zip文件示例相关推荐

  1. java 操作Zip文件(压缩、解压、加密)

    java 操作Zip文件(压缩.解压.加密) 依赖:点击下载 package com.zxl.test;import net.lingala.zip4j.model.ZipParameters; im ...

  2. 利用java进行zip文件解压缩

    利用java进行zip文件解压缩 本文利用Java的zip包中的ZipFile和ZipEntry两个类,获取到压缩包中的所有文件,并将压缩文件通过InputStream写入一个byte数组,再将该by ...

  3. Java实现Zip文件解压

    2019独角兽企业重金招聘Python工程师标准>>> ##1. 两种java实现zip文件解压方式 使用JDK的原生类java.util.zip,上代码: import java. ...

  4. java zip文件操作,java 关于 zip 文件 的 基本操作

    这里用的是appache的包  为了防止文件中文名乱码问题 java 操作 .zip 文件  压缩文件 解压文件 删除文件夹等 package com.gaeainfo.toponymbase.uti ...

  5. java下载zip文件损坏_使用Java下载.zip文件会导致损坏的.zip文件?

    我写了这个方法来下载最新的Selenium Chrome驱动程序,它不起作用.它导致损坏的.zip文件.任何人都可以发现我的错误在哪里?使用Java下载.zip文件会导致损坏的.zip文件? priv ...

  6. python读xml文件生成.h头文件_Python创建xml文件示例

    Python创建xml文件示例 这里有新鲜出炉的 Python 入门,程序狗速度看过来! Python 编程语言 Python 是一种面向对象.解释型计算机程序设计语言,由 Guido van Ros ...

  7. Java实现Zip文件的解压和压缩_ZipUtil

    这是一个关于Java的zip文件的解压和压缩工具类,里面除了解压和压缩还有删除.copy等其他功能. 在Java开发中,经常会遇到上传下载,有可能就会遇到解压,于是我就封装了工具类,方便使用. 在本文 ...

  8. JS创建ZIP文件,JSZip的使用

    Hi I'm Shendi 最近编写压缩工具,需要使用js创建zip文件,使用 JSZip 插件 官网: https://stuk.github.io/jszip/ Github: https://g ...

  9. Java创建多级文件夹

    Java创建多级文件夹 Java的File类坑巨多,就创建文件来说,多级创建和单级创建竟然不一样. 直接上API mkdir只能创建一个文件夹,而想创建多级文件夹需要用mkdirs,多了个s. 来来, ...

  10. java解压zip异常_java解压zip文件示例

    若是使用Java自带的压缩工具包来实现解压缩文件到指定文件夹的功能,因为jdk提供的zip只能按UTF-8格式处理,而Windows系统中文件名是以GBK方式编码的,所以如果是解压一个包含中文文件名的 ...

最新文章

  1. iOS进阶之类别(Category)(9)
  2. vim trick之 vimrc更改立即生效
  3. php字符串截取自​定义函数
  4. Flask框架(SQLAlchemy(python3版本)中添加数据 )
  5. 删除msconfig启动项不打勾的东西
  6. FLV封装格式介绍及解析
  7. 超形象!著名的三角不等式演示动图!
  8. 建站用什么cms_我想做独立站,我应该用什么建站工具?
  9. Netty工作笔记0018---Selector介绍和原理
  10. 网络安全统计显示XSS和过时的软件是主要问题
  11. 硬,软连接,以及在windows中的用法
  12. 156.PHP多进程
  13. head first html与css 代码_手把手教你使用Flask轻松部署机器学习模型(附代码amp;链接) | CSDN博文精选...
  14. 强者的系统:高观点下的人生
  15. Image Signal Processing(ISP)-第三章-BCL, WB, Gamma的原理和软件实现
  16. 教你利用VMM虚拟机安装LEDE旁路由实现软路由超强功能的方法教程
  17. 训练MTCNN之前的环境以及依赖配置
  18. 2019复旦大学计算机分数线,复旦大学2019年各省各批次录取分数线和招生专业
  19. OSChina 周一乱弹 —— 论备份容灾的重要性
  20. 生活中的一些常用理论

热门文章

  1. 四、数组定义/冒泡排序的理论/什么是方法
  2. SPOJ Qtree系列
  3. 用bootstrap模态框的时候,点击多少次按钮(确定、关闭),后台提交多少次Ajax,重复提交...
  4. Python中的self和init
  5. 18 网络编程-TCP/IP各层介绍(5层模型讲解)
  6. oracle 负载均衡连接方式常用SQL语句备忘录
  7. iOS-Senior19-FMDB第三方应用
  8. Spring中Bean的作用域差别
  9. HTML 标签的 target 属性
  10. ApiCloud数据Url请求