java 打包的两种方式
一.利用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 打包的两种方式相关推荐
- Java技术分享:升级所安装Java版本的两种方式
在进行Java开发的时候我们可能会需要升级所安装的Java版本,那么你知道应该如何安装吗?小千今天就来给大家介绍两种方式. 一.卸载掉原本安装的Java,下载最新安装包安装即可. 这个步骤就不介绍了, ...
- Linux之Ubuntu20.04安装Java JDK8的两种方式
Linux之Ubuntu20.04远程安装Java JDK8的两种方式 安装openjdk8 更新软件包列表: sudo apt-get update 安装openjdk-8-jdk: sudo ap ...
- Java连接Oracle两种方式thin与oci区别
Java连接Oracle两种方式thin与oci区别 前几天同事跑过来跟我说, 机房中的一台tomcat服务器跟oracle数据库机连接很慢,查看控制台中的hibernate日志, 基本上是一条sql ...
- Maven项目依赖外部jar进行打包的两种方式
项目中除了pom.xml依赖之外,有时还依赖了其他jar包,如图: 依赖的方式如下: 点击Project Structure进行项目设置,在Modules中Dependencies标签中点击+号 添加 ...
- Java 分页,两种方式的分页,即取即用的代码,不客气
两种方式,一种是currentPage + pageSize, 一种是limit + offset (limit + offset 这个逻辑太恶心,边缘测试很麻烦) 第一种(currentPage + ...
- java实例化字符串两种方式区别
一:实例化字符串对象的两种方式的区别 这个知识点是面试中的一个经久不衰的问题,.也是一个比较麻烦的问题,对于许多同学来说也是难点,本次课我们会详细的分析.上次课说了创建字符串对象的两种方式:直接赋值( ...
- 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 第一种算法,如下代码 ...
- Java异常处理的两种方式
异常处理方式一:在当前方法中直接用try-catch处理 异常处理方式二:在当前方法中不处理,throws 异常抛给调用者处理 一. try-catch的方式就是捕获异常. try:该代码块中编写可能 ...
- App打包的两种方式
在HBuilder上对APP提供了两种打包方式,云打包和本地打包,下面主要对这两种打包方式做个介绍 两者的区别:云打包相对简单,但是每天最多只能打包五次,而且在高峰期打包时间可能会很长,本地打包相对比 ...
最新文章
- js Array.prototype.slice.call(arguments,0) 理解
- 四边形可以分为几类_四边形有几种类型
- springMVC通过spring.xml对属性注入bean值(工厂模式)
- 实战Zabbix-Server数据库MySQL的libdata1文件过大
- Atitit。Cas机制 软件开发 编程语言 无锁机制 java c# php
- 浮点型数据类型存储空间大小(信息学奥赛一本通-T1017)
- think php5关联模型,thinkphp5的模型中使用关联
- 【十六】Jmeter:目录介绍
- 三个数据分析里最难攻破的“悖论”,每一个都令人费解
- 有道云笔记分享_原来分享可以更美的 有道云笔记分享功能优雅变身
- 利用matplotlib绘制多个实时刷新的动态图表
- PostgreSQL 源码解读(35)- 查询语句#20(查询优化-简化Having和Grou...
- OS_PV操作_4.过独木桥问题
- alueError: With n_samples=1, test_size=0.2 and train_size=None, the resulting train set will be
- 移动硬盘安装Ubuntu,并确保在任何电脑都可用
- Java基础教程:k8s快速入门
- Debian的BIND9的配置
- Chawt.com 免费给全球发送短信
- Mac上docker下安装mongodb出错?
- 【学习笔记】SMBMS项目练习