上来先是标准方式的压缩

    /*** 标准方式压缩* @param zipFileName* @param inputFile* @throws Exception*/public static void zip(String zipFileName, File inputFile) throws Exception {ZipOutputStream out = new ZipOutputStream(new FileOutputStream(zipFileName));zip(out, inputFile, "");out.close();}/*** 标准方式压缩* @param out* @param f* @param base* @throws Exception*/private static void zip(ZipOutputStream out, File f, String base) throws Exception {if (f.isDirectory()) {File[] fl = f.listFiles();out.putNextEntry(new org.apache.tools.zip.ZipEntry(base + "/"));out.closeEntry();  base = base.length() == 0 ? "" : base + "/";for (int i = 0; i < fl.length; i++) {if(fl[i].getName().indexOf(".zip")==-1){zip(out, fl[i], base + fl[i].getName());}}}else {out.putNextEntry(new org.apache.tools.zip.ZipEntry(base));FileInputStream in = new FileInputStream(f);int b;while ( (b = in.read()) != -1) {out.write(b);}out.closeEntry()in.close();}}        

现在是存储方式压缩

    /*** 按存储方式压缩* @param zipFileName* @param inputFile* @throws Exception*/public static void zip_stored(String zipFileName, File inputFile) throws Exception {ZipOutputStream out = new ZipOutputStream(new FileOutputStream(zipFileName));zip_stored(out, inputFile, "");out.close();}/*** 按存储方式压缩* @param out* @param f* @param base* @throws Exception*/private static void zip_stored(ZipOutputStream out, File f, String base) throws Exception {out.setMethod(ZipOutputStream.STORED);if (f.isDirectory()) {File[] fl = f.listFiles();base = base.length() == 0 ? "" : base + "/";for (int i = 0; i < fl.length; i++) {if (fl[i].getName().indexOf(".zip") == -1) {zip_stored(out, fl[i], base + fl[i].getName());}}} else {ZipEntry entry = new ZipEntry(base);entry.setMethod(ZipEntry.STORED);entry.setSize(f.length());long crc = 0;crc = calFileCRC32(f);entry.setCrc(crc);out.putNextEntry(entry);FileInputStream in = new FileInputStream(f);int b;while ((b = in.read()) != -1) {out.write(b);}out.closeEntry()in.close();}}public static long calFileCRC32(File file) throws IOException {FileInputStream fi = new FileInputStream(file);CheckedInputStream checksum = new CheckedInputStream(fi, new CRC32());while (checksum.read() != -1) { }long temp = checksum.getChecksum().getValue();fi.close();checksum.close();return temp;}

现在进行解释一下

ZipOutputStream类有设置压缩方法以及在压缩方式下使用的压缩级别,zipOutputStream.setMethod(int method)设置用于条目的默认压缩方法。只要没有为单个 ZIP 文件条目指定压缩方法,就使用ZipOutputStream所设置的压缩方法来存储,默认值为 ZipOutputStream.DEFLATED(表示进行压缩存储),还可以设置成STORED(表示仅打包归档存储),此处的存储压缩便是采用仅打包归档存储,即文件大小基本不变。

ZipOutputStream在设置了压缩方法为DEFLATED后,我们还可以进一步使用setLevel(int level)方法来设置压缩级别,压缩级别值为0-9共10个级别(值越大,表示压缩越利害),默认为Deflater.DEFAULT_COMPRESSION=-1。当然我们也可以通过条目ZipEntry的setMethod方法为单个条件设置压缩方法。

out.putNextEntry(new org.apache.tools.zip.ZipEntry(base)); // 创建压缩的子目录 , 将文件夹放入zip中

out.closeEntry() ;  // 关闭zip文件中之前打开的项

如果是存储方式压缩的话得设置压缩的类型:

out.setMethod(ZipOutputStream.STORED); //指定为存储方式压缩

参考资料:

http://jiangzhengjun.iteye.com/blog/517186

zip 压缩方式:按标准方式和存储方式压缩相关推荐

  1. java float存储方式_Java中小数的存储方式

    因为底层的二进制数不能精确表示所有的小数.有时候会产生让人觉得莫名其妙的事情. 如在java中, 0.99999999f==1f//true 0.9f==1f //false 要明白这些,首先要搞清楚 ...

  2. mysql中存储gis数据类型_GIS数据格式及存储方式的基本概念

    GIS概念中有相当多的数据文件格式,我们经常接触到的数据格式可以大致分为"栅格数据"与"矢量数据"这两类.这两类数据分别对应着不同的应用场景,我们通常使用&qu ...

  3. C语言中结构体内存存储方式

    C语言中结构体内存存储方式 结构体的默认存储方式采用以最大字节元素字节数对其方式进行对齐,例如一个结构体中定义有char.int类型元素,则结构体存储空间按照int类型占用字节,如果还有double类 ...

  4. 关于3dtiles标准b3dm中glb的图像存储方式建议

    主题 根据3dtiles标准规定,Glb是以二进制方式压缩在b3dm中的.但是针对glb中存在的图像的情况,则应特别注意图像的存储方式,否则可能导致生成的3dtiles在cesium中将无法正常访问. ...

  5. IEEE754标准: 浮点数在内存中的存储方式

    一. 什么是IEEE754标准 我们知道, 计算机内部实际上只能存储或识别二进制. 在计算机中, 我们日常所使用的文档, 图片, 数字等, 在储存时, 实际上都要以二进制的形式存放在内存或硬盘中, 内 ...

  6. C/C++浮点数的存储方式 IEEE-754标准,以及实现一个ftoa函数将浮点数转换为字符串

    浮点数的存储格式 转载自 : http://www.cnblogs.com/dolphin0520/archive/2011/10/02/2198280.html C/C++浮点数在内存中的存储方式 ...

  7. 图片或者其他文件在数据库的存储方式详解

    关于图片或者文件在数据库的存储方式归纳 商品图片,用户上传的头像,其他方面的图片.目前业界存储图片有两种做法: 1.  把图片直接以二进制形式存储在数据库中 一般数据库提供一个二进制字段来存储二进制数 ...

  8. 图像存储方式及使用OpenCV简单处理图像

    一.目的 简述图像存储方式及使用OpenCV简单处理图像. 二.图像存储方式 2.1.YUV 2.1.1.简介 YUV是编译true-color颜色空间(color space)的种类,Y'UV, Y ...

  9. 一篇文章让你了解视频监控系统搭建过程中如何选择存储方式

    作为安防视频流媒体服务器软件的提供商,我们日常项目中遇到的需求主要是搭建一整套完整的视频监控系统,包括前端摄像头.线缆.传输系统.存储系统.解码拼控和大屏设备等组成.存储系统是整个监控系统中最为重要的 ...

最新文章

  1. Alpha冲刺——day1
  2. 加速数据中心变革,Xilinx推出软件定义、硬件加速型 Alveo SmartNIC
  3. PLL和DLL的区别
  4. mplus 软件_Mplus 7.4 软件及代码
  5. 抓包软件:Charles
  6. mysql-复习表的基本操作01
  7. Fatal error: Call to undefined function randstr()
  8. PDF文件编辑方法:PDF怎么插入图片背景
  9. 中文字体的英文名称 (simhei, simsun) 宋体 微软雅黑
  10. matlab 系统 h10,Thinkbook、ThinkPad出厂带H10混合固态的机器重装系统启用傲腾的方法...
  11. 无源蜂鸣器c语言编程,电磁式蜂鸣器驱动原理与简单蜂鸣器编程及电路设计案例...
  12. 缉拿IP冲突之后的“真凶”
  13. jdk1.8_API中英文帮助文档下载
  14. Spring-IoCDI
  15. 相对路径与绝对路径区别
  16. 熊孩子说“你没看过奥特曼”,赶紧用Python学习一下,没想到
  17. 门禁系统一定要服务器吗,门禁系统服务器功能配置
  18. 4.5 函数最佳逼近
  19. python ppt转pdf macos_如何在 macOS 上一键批量把 PPT 和 Word 文件转成 PDF
  20. 期末前端web大作业:用DIV+CSS技术设计的动漫网站

热门文章

  1. 初中数学最全几何模型_初中数学几何九大模型,看见的不能错过,收藏后考试必备...
  2. quotacheck - 扫描文件系统,创建,检测并修补配额文件
  3. wu2198:难得的波段抄底机会
  4. Android Studio检查依赖库是否有新版本,非常好用
  5. java 实验十 数据库实验_数据库实验十[荟萃内容]
  6. opporeno5k投屏功能使用方法分享
  7. “玲珑杯”ACM比赛 Round #15 A
  8. Fortran开发环境在Win7 64位下配置:Compaq Visual Fortran6.5 or 6.6
  9. FilterDispatcher 的作用
  10. 在多少进制的计算下,可以让圆周率和黄金分割点变成该进制下的有理数?