一.利用java 自带的util.zip 将多个文件打包在一个文件夹之中

import java.io.*;
import java.util.ArrayList;
import java.util.List;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;public class CreateZip {//将所有的文件打包到一个zip包中 没有目录结构 且运用的是jdk自带的打包工具public static void main(String[] args) {//要打包的文件路径List<String> listKey = new ArrayList<String>();listKey.add("D:\\img\\1.png");listKey.add("D:\\img\\2.png");listKey.add("D:\\img\\论文解析详细设计.docx");File zipFile = new File("D:\\zipTest\\img.zip");// 最终打包的压缩包System.out.println("zipFile exists: " + zipFile.exists());System.out.println("zipFile size: " + zipFile.length());packageZip(zipFile,listKey);System.out.println("zipFile exists2: " + zipFile.exists());System.out.println("zipFile size: " + zipFile.length());}public static boolean packageZip(File zipFile, List<String> listKey){//图片打包操作ZipOutputStream zipStream = null;FileInputStream zipSource = null;BufferedInputStream bufferStream = null;try {zipStream = new ZipOutputStream(new FileOutputStream(zipFile));// 用这个构造最终压缩包的输出流for (String picKey : listKey) {File file = new File(picKey);zipSource = new FileInputStream(file);byte[] bufferArea = new byte[1024 * 10];// 读写缓冲区// 压缩条目不是具体独立的文件,而是压缩包文件列表中的列表项,称为条目,就像索引一样ZipEntry zipEntry = new ZipEntry(file.getName());zipStream.putNextEntry(zipEntry);// 定位到该压缩条目位置,开始写入文件到压缩包中bufferStream = new BufferedInputStream(zipSource, 1024 * 10);// 输入缓冲流int read = 0;// 在任何情况下,b[0] 到 b[off] 的元素以及 b[off+len] 到 b[b.length-1]// 的元素都不会受到影响。这个是官方API给出的read方法说明,经典!while ((read = bufferStream.read(bufferArea, 0, 1024 * 10)) != -1) {zipStream.write(bufferArea, 0, read);}}} catch (Exception e) {return false;} finally {// 关闭流try {if (null != bufferStream)bufferStream.close();if (null != zipStream)zipStream.close();if (null != zipSource)zipSource.close();} catch (IOException e) {e.printStackTrace();return false;}}return true;}
}

二,采用apache的ant打包,包含文件夹一起打包

import org.apache.tools.zip.ZipEntry;
import org.apache.tools.zip.ZipOutputStream;import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;public class CreateZipAnt {public static void main(String[] args) {try {long starTime = 0;long endTime = 0;System.out.println("开始压缩...");starTime = System.currentTimeMillis();ZIP("D:\\img", "D:\\zipTest\\img.zip");endTime = System.currentTimeMillis();System.out.println("压缩完毕!花费时间: " + (endTime - starTime) + " 毫秒!");} catch (Exception ex) {ex.printStackTrace();}}public static void ZIPDIR(String sourceDir, ZipOutputStream zos, String tager) throws IOException {//System.out.println(tager);ZipEntry ze = new ZipEntry(tager);zos.putNextEntry(ze);// 提取要压缩的文件夹中的所有文件File f = new File(sourceDir);File[] flist = f.listFiles();if (flist != null) {// 如果该文件夹下有文件则提取所有的文件进行压缩for (File fsub : flist) {if (fsub.isDirectory()) {//如果是目录则进行目录压缩ZIPDIR(fsub.getPath(), zos, tager + fsub.getName() + "/");} else {//如果是文件,则进行文件压缩ZIPFile(fsub.getPath(), zos, tager + fsub.getName());}}}}public static void ZIP(String source, String zipFileName) throws IOException {ZipOutputStream zos = new ZipOutputStream(new File(zipFileName));// 设置压缩的时候文件名编码为gb2312zos.setEncoding("gb2312");File f = new File(source);if (f.isDirectory()) {// 如果直接压缩文件夹ZIPDIR(source, zos, f.getName() + "/");// 此处使用/来表示目录,如果使用\\来表示目录的话,会导致压缩后的文件目录组织形式在解压缩的时候不能正确识别。} else {// 如果直接压缩文件ZIPDIR(f.getPath(), zos, new File(f.getParent()).getName() + "/");ZIPFile(f.getPath(), zos, new File(f.getParent()).getName() + "/" + f.getName());}zos.closeEntry();zos.close();}public static void ZIPFile(String sourceFileName, ZipOutputStream zos, String tager) throws IOException {ZipEntry ze = new ZipEntry(tager);zos.putNextEntry(ze);// 读取要压缩文件并将其添加到压缩文件中FileInputStream fis = new FileInputStream(new File(sourceFileName));byte[] bf = new byte[2048];int location = 0;while ((location = fis.read(bf)) != -1) {zos.write(bf, 0, location);}fis.close();}
}

转载于:https://www.cnblogs.com/huangzhimin/p/10641055.html

java 打包的两种方式相关推荐

  1. Java技术分享:升级所安装Java版本的两种方式

    在进行Java开发的时候我们可能会需要升级所安装的Java版本,那么你知道应该如何安装吗?小千今天就来给大家介绍两种方式. 一.卸载掉原本安装的Java,下载最新安装包安装即可. 这个步骤就不介绍了, ...

  2. Linux之Ubuntu20.04安装Java JDK8的两种方式

    Linux之Ubuntu20.04远程安装Java JDK8的两种方式 安装openjdk8 更新软件包列表: sudo apt-get update 安装openjdk-8-jdk: sudo ap ...

  3. Java连接Oracle两种方式thin与oci区别

    Java连接Oracle两种方式thin与oci区别 前几天同事跑过来跟我说, 机房中的一台tomcat服务器跟oracle数据库机连接很慢,查看控制台中的hibernate日志, 基本上是一条sql ...

  4. Maven项目依赖外部jar进行打包的两种方式

    项目中除了pom.xml依赖之外,有时还依赖了其他jar包,如图: 依赖的方式如下: 点击Project Structure进行项目设置,在Modules中Dependencies标签中点击+号 添加 ...

  5. Java 分页,两种方式的分页,即取即用的代码,不客气

    两种方式,一种是currentPage + pageSize, 一种是limit + offset (limit + offset 这个逻辑太恶心,边缘测试很麻烦) 第一种(currentPage + ...

  6. java实例化字符串两种方式区别

    一:实例化字符串对象的两种方式的区别 这个知识点是面试中的一个经久不衰的问题,.也是一个比较麻烦的问题,对于许多同学来说也是难点,本次课我们会详细的分析.上次课说了创建字符串对象的两种方式:直接赋值( ...

  7. Java练习:两种方式求1+1/2!+1/3!+1/4!+...前20项的和、用for,while,do-while分别实现1+1/2!+1/3!+1/4!+...前20项的和

    Java两种方式求 1+1/2!+1/3!+1/4!+... 前20项的和: 感叹号 !是阶乘的意思,如 2! .3! .4! 分别是:1*2 . 1*2*3 .1*2*3*4  第一种算法,如下代码 ...

  8. Java异常处理的两种方式

    异常处理方式一:在当前方法中直接用try-catch处理 异常处理方式二:在当前方法中不处理,throws 异常抛给调用者处理 一. try-catch的方式就是捕获异常. try:该代码块中编写可能 ...

  9. App打包的两种方式

    在HBuilder上对APP提供了两种打包方式,云打包和本地打包,下面主要对这两种打包方式做个介绍 两者的区别:云打包相对简单,但是每天最多只能打包五次,而且在高峰期打包时间可能会很长,本地打包相对比 ...

最新文章

  1. js Array.prototype.slice.call(arguments,0) 理解
  2. 四边形可以分为几类_四边形有几种类型
  3. springMVC通过spring.xml对属性注入bean值(工厂模式)
  4. 实战Zabbix-Server数据库MySQL的libdata1文件过大
  5. Atitit。Cas机制 软件开发 编程语言 无锁机制 java c# php
  6. 浮点型数据类型存储空间大小(信息学奥赛一本通-T1017)
  7. think php5关联模型,thinkphp5的模型中使用关联
  8. 【十六】Jmeter:目录介绍
  9. 三个数据分析里最难攻破的“悖论”,每一个都令人费解
  10. 有道云笔记分享_原来分享可以更美的 有道云笔记分享功能优雅变身
  11. 利用matplotlib绘制多个实时刷新的动态图表
  12. PostgreSQL 源码解读(35)- 查询语句#20(查询优化-简化Having和Grou...
  13. OS_PV操作_4.过独木桥问题
  14. alueError: With n_samples=1, test_size=0.2 and train_size=None, the resulting train set will be
  15. 移动硬盘安装Ubuntu,并确保在任何电脑都可用
  16. Java基础教程:k8s快速入门
  17. Debian的BIND9的配置
  18. Chawt.com 免费给全球发送短信
  19. Mac上docker下安装mongodb出错?
  20. 【学习笔记】SMBMS项目练习

热门文章

  1. linux下如何判断oracle数据库tns是否设置正常
  2. hdu 4632 子字符串统计的区间dp
  3. 资深程序员不一定当得了软件架构师
  4. nessus国内用户不让免费使用了!
  5. 客户端AJAX验证表单
  6. 微软安全管理解决方案 为企业安全保驾护航
  7. 一个关于CentOS下apache配置修改生效的问题
  8. word图片自动换行不亮_Word自动换行版式不变形
  9. c语言折半查找法_C语言学习|选择法排序及折半查找法查找
  10. Xamarin图表开发基础教程(4)OxyPlot框架