最近在一个前辈的指引下,开始研究apache.commons。都是网上找的,而且不会中文乱码,而且还可以在压缩包里面加一层文件夹

  1. package my.test;
  2.  
  3. import java.io.BufferedInputStream;
  4. import java.io.BufferedOutputStream;
  5. import java.io.File;
  6. import java.io.FileInputStream;
  7. import java.io.FileOutputStream;
  8. import java.io.IOException;
  9. import java.io.InputStream;
  10. import java.io.OutputStream;
  11. import java.util.ArrayList;
  12. import java.util.HashMap;
  13. import java.util.List;
  14. import java.util.Map;
  15.  
  16. import org.apache.commons.compress.archivers.tar.TarArchiveEntry;
  17. import org.apache.commons.compress.archivers.tar.TarArchiveInputStream;
  18. import org.apache.commons.compress.archivers.zip.Zip64Mode;
  19. import org.apache.commons.compress.archivers.zip.ZipArchiveEntry;
  20. import org.apache.commons.compress.archivers.zip.ZipArchiveInputStream;
  21. import org.apache.commons.compress.archivers.zip.ZipArchiveOutputStream;
  22. import org.apache.commons.compress.compressors.bzip2.BZip2CompressorInputStream;
  23. import org.apache.commons.compress.compressors.gzip.GzipCompressorInputStream;
  24. import org.apache.commons.io.FilenameUtils;
  25. import org.apache.commons.io.IOUtils;
  26. import org.apache.commons.lang3.StringUtils;
  27.  
  28. public class FileUtil {
  29.  
  30. public static int BUFFER_SIZE = 2048;
  31. public static List<String> unZip(File zipfile, String destDir)
  32. throws Exception {
  33. if (StringUtils.isBlank(destDir)) {
  34. destDir = zipfile.getParent();
  35. }
  36. destDir = destDir.endsWith(File.separator) ? destDir : destDir
  37. + File.separator;
  38. ZipArchiveInputStream is = null;
  39. List<String> fileNames = new ArrayList<String>();
  40.  
  41. try {
  42. is = new ZipArchiveInputStream(new BufferedInputStream(
  43. new FileInputStream(zipfile), BUFFER_SIZE));
  44. ZipArchiveEntry entry = null;
  45. while ((entry = is.getNextZipEntry()) != null) {
  46. fileNames.add(entry.getName());
  47. if (entry.isDirectory()) {
  48. File directory = new File(destDir, entry.getName());
  49. directory.mkdirs();
  50. } else {
  51. OutputStream os = null;
  52. try {
  53. os = new BufferedOutputStream(new FileOutputStream(
  54. new File(destDir, entry.getName())),
  55. BUFFER_SIZE);
  56. IOUtils.copy(is, os);
  57. } finally {
  58. IOUtils.closeQuietly(os);
  59. }
  60. }
  61. }
  62. } catch (Exception e) {
  63. e.printStackTrace();
  64. throw e;
  65. } finally {
  66. IOUtils.closeQuietly(is);
  67. }
  68.  
  69. return fileNames;
  70. }
  71.  
  72. public static List<String> unZip(String zipfile, String destDir)
  73. throws Exception {
  74. File zipFile = new File(zipfile);
  75. return unZip(zipFile, destDir);
  76. }
  77.  
  78. public static void compressFiles2Zip(File[] files, String zipFilePath) {
  79. if (files != null && files.length > 0) {
  80. ZipArchiveOutputStream zaos = null;
  81. File f = new File(zipFilePath);
  82. if(f.isDirectory())
  83. {
  84. System.out.println("isDirectory");
  85. return;
  86. }
  87. if(f.exists())
  88. {
  89. f.delete();
  90. }
  91. try {
  92. File zipFile = new File(zipFilePath);
  93. zaos = new ZipArchiveOutputStream(zipFile);
  94. zaos.setUseZip64(Zip64Mode.AsNeeded);
  95. int index = 0;
  96. for (File file : files) {
  97. if (file != null) {
  98. ZipArchiveEntry zipArchiveEntry = new ZipArchiveEntry(
  99. file, new File(file.getParent()).getName()+File.separator+file.getName());
  100. zaos.putArchiveEntry(zipArchiveEntry);
  101. InputStream is = null;
  102. try {
  103. is = new BufferedInputStream(new FileInputStream(
  104. file));
  105. byte[] buffer = new byte[1024 * 5];
  106. int len = -1;
  107. while ((len = is.read(buffer)) != -1) {
  108. // 把缓冲区的字节写入到ZipArchiveEntry
  109. zaos.write(buffer, 0, len);
  110. }
  111. // Writes all necessary data for this entry.
  112. zaos.closeArchiveEntry();
  113. } catch (Exception e) {
  114. throw new RuntimeException(e);
  115. } finally {
  116. if (is != null)
  117. is.close();
  118. }
  119.  
  120. }
  121.  
  122. }
  123.  
  124. zaos.finish();
  125.  
  126. } catch (Exception e) {
  127.  
  128. throw new RuntimeException(e);
  129.  
  130. } finally {
  131.  
  132. try {
  133.  
  134. if (zaos != null) {
  135.  
  136. zaos.close();
  137.  
  138. }
  139.  
  140. } catch (IOException e) {
  141.  
  142. throw new RuntimeException(e);
  143.  
  144. }
  145.  
  146. }
  147.  
  148. }
  149.  
  150. }
  151.  
  152. public static void main(String[] args) throws Exception {
  153.  
  154. String f = "C:/20161202/notepad_cache/test/notepad_cache - 副本";
  155. File file = new File(f);
  156.  
  157. File[] files = new File[100];
  158. int index = 0;
  159. for(String ff : file.list())
  160. {
  161. files[index++] = new File(f+File.separator+ff);
  162.  
  163. }
  164. compressFiles2Zip(files, f+".zip");
  165. /*
  166. String f = "C:/20161202/notepad_cache/test/notepad_cache - 副本";
  167. unZip(f+"1.zip", "C:/1202/notepad_cache/test/");*/
  168. }
  169.  
  170. }

apache.commons.compress 压缩,解压的更多相关文章

  1. linux驱动系列之文件压缩解压小节(转)

    转至网页:http://www.jb51.net/LINUXjishu/43356.html Linux下最常用的打包程序就是tar了,使用tar程序打出来的包我们常称为tar包,tar包文件的命令通 ...

  2. Linux的压缩解压命令快速上手——解压篇

    在Linux系统中,压缩文件通常是先将若干文件(包括目录)打包成一个tar文件,然后再调用压缩程序将tar文件压缩成相应的压缩包,这也就是为什么Linux系的压缩包的后缀通常都是像tar.gz,tar ...

  3. 使用SevenZipSharp压缩/解压7z格式

    7z格式采用的LZMA算法,号称具有现今最高压缩率.笔者在nuget上搜索7z,在搜索结果中最终选择了SevenZipSharp来进行压缩/解压.不得不说,SevenZipSharp的API设计得非常 ...

  4. linux压缩解压命令

    -c: 建立压缩档案  -x:解压  -t:查看内容  -r:向压缩归档文件末尾追加文件  -u:更新原压缩包中的文件  这五个是独立的命令,压缩解压都要用到其中一个,可以和别的命令连用但只能用其中一 ...

  5. linux中tar及压缩解压命令用法

    把常用的tar解压命令总结下,当作备忘: tar 命令可以为Linux的文件和目录创建档案.利用 tar,可以为某一特定文件创建档案(备份文件),也可以在档案中改变文件,或者向 档案中加入新的文件.t ...

  6. linux下打压缩解压

    tar -c: 建立压缩档案-x:解压-t:查看内容-r:向压缩归档文件末尾追加文件-u:更新原压缩包中的文件 这五个是独立的命令,压缩解压都要用到其中一个,可以和别的命令连用但只能用其中一个.下面的 ...

  7. WebAPI性能优化之压缩解压

    有时候为了提升WebAPI的性能,减少响应时间,我们会使用压缩和解压,而现在大多数客户端浏览器都提供了内置的解压支持.在WebAPI请求的资源越大时,使用压缩对性能提升的效果越明显,而当请求的资源很小 ...

  8. linux命令tar压缩解压

    tar -c: 建立压缩档案-x:解压-t:查看内容-r:向压缩归档文件末尾追加文件-u:更新原压缩包中的文件 这五个是独立的命令,压缩解压都要用到其中一个,可以和别的命令连用但只能用其中一个.下面的 ...

  9. (转载)C#压缩解压zip 文件

    转载之: C#压缩解压zip 文件 - 大气象 - 博客园http://www.cnblogs.com/greatverve/archive/2011/12/27/csharp-zip.html C# ...

随机推荐

  1. ASP.NET CORE配置信息

    做个笔记,原文链接 除了应用 IOptions<T> .Value的方式对配置信息进行全局注册外可以应用的另一个微软给出的组件,需要依赖两个包 Microsoft.Extensions.C ...

  2. java接口调用——webservice就是一个RPC而已

    很多新手一听到接口就蒙逼,不知道接口是什么!其实接口就是RPC,通过远程访问别的程序提供的方法,然后获得该方法执行的接口,而不需要在本地执行该方法.就是本地方法调用的升级版而已,我明天会上一篇如何通过 ...

  3. [转] IIS配置文件的XML格式不正确 applicationHost.config崩溃 恢复解决办法

    IIS配置文件的XML格式不正确 applicationHost.config崩溃 恢复解决办法 源文件:http://www.cnblogs.com/yuejin/p/3385584.html   ...

  4. 嵌入式:J-link刷固件(坑)

    1.上电,短接ERASE,>10秒后,拔USB. 2.短接TST,上电,>10秒后,拔USB. 3.安装驱动.(看别人教程,下载到INF文件,WIN7不能右击安装,好,换虚拟机XP) 4. ...

  5. Android 手机卫士--导航界面3、4和功能列表界面跳转逻辑处理

    刚刚花了一点时间,将导航界面3.4的布局和相应的跳转逻辑写了一下: Setup3Activity代码如下: /** * Created by wuyudong on 2016/10/10. */ pu ...

  6. gulp入门小记

    由于我所在的项目组一直在用gulp构建工具,而我只是在前人搭好的环境下每次运行gulp packJs来打包js,对里面的东西全然不知,刚好最近有些时间就想自己从学学将gulp怎么用于构建前端项目中,这 ...

  7. Kali v2.1.2 for Raspberry Pi 3B

    最新的下载地址是: https://www.offensive-security.com/kali-linux-arm-images/ 按照官网的说法是找不到树莓派版本的SHA1SUM和SHA1SUM ...

  8. 拥抱.NET Core,跨平台的轻量级RPC:Rabbit.Rpc

    不久前发布了一篇博文".NET轻量级RPC框架:Rabbit.Rpc",当初只实现了非常简单的功能,也罗列了之后的计划,经过几天的不断努力又为Rabbit.Rpc增加了一大波新特性 ...

  9. JS控制键盘录入 和 window.event.keycode对照

    一.只允许录入整数 1.不允许录入非数字(按下字母键就会提示并清空) function intOnly() { if (!(window.event.keyCode >= 48 &&am ...

  10. SQL面试笔试经典题(Part 2)

    本文是在Cat Qi的原贴的基础之上,经本人逐题分别在MySql数据库中实现的笔记. 参考原贴:http://www.cnblogs.com/qixuejia/p/3637735.html 01 问题 ...