项目中有这样的需求,在导出的时候需要导出压缩包,导入的时候需要解压缩包。网上看到不少代码都有不少缺陷,要不zip不支持中文,要不不支持压缩到任意目录,修改了下发上了。亲测亲改可用
需要两个jar包,一个ZipEntry.jar让zip压缩支持中文
一个commons-compress-1.5是tar和gz支持的包
一起打包提供下载地址 压缩jar包

后面的tar.gz实际是先打了tar包然后做的gz压缩,所以单独的tar包或者gz压缩解压缩,去掉一部分代码即可

/*** 递归zip压缩一个文件夹中所有的文件* zip压缩*/private static void compress(File file, com.file.zip.ZipOutputStream out, String basedir){/* 判断是目录还是文件 */if (file.isDirectory()){compressDirectory(file, out, basedir);}else{compressFile(file, out, basedir);}}/** 压缩一个目录 */private static void compressDirectory(File dir, com.file.zip.ZipOutputStream out, String basedir){if (!dir.exists()) return;File[] files = dir.listFiles();for (int i = 0; i < files.length; i++) {compress(files[i], out, basedir + dir.getName() + "/");}}/** 压缩一个文件 */private static void compressFile(File file, com.file.zip.ZipOutputStream out, String basedir){if (!file.exists()) {return;}try {BufferedInputStream bis = new BufferedInputStream(new FileInputStream(file));com.file.zip.ZipEntry entry = new com.file.zip.ZipEntry(basedir + file.getName());out.putNextEntry(entry);int count;byte data[] = new byte[1024];while ((count = bis.read(data)) != -1){out.write(data, 0, count);}bis.close();}catch (Exception e) {throw new RuntimeException(e);}}public static void zip(String srcPathName, String zipFileName){File file = new File(srcPathName);File zipFile = new File(zipFileName);if (!file.exists()) throw new RuntimeException(srcPathName + "不存在!");try{FileOutputStream fileOutputStream = new FileOutputStream(zipFile);CheckedOutputStream cos = new CheckedOutputStream(fileOutputStream, new CRC32());com.file.zip.ZipOutputStream out = new com.file.zip.ZipOutputStream(cos);out.setEncoding(System.getProperty("sun.jnu.encoding"));//设置文件名编码方式String basedir = "";compress(file, out, basedir);out.close();}catch (Exception e){throw new RuntimeException(e);}}
/*** 解压缩zip工具类* @param file 压缩文件* @param dir 解压缩*目录** @throws IOException*/public static void unzip(File file, String dir) throws IOException {//建立目标目录File parent = new File(dir);if (!parent.exists()){parent.mkdirs();}ZipFile zipFile = new ZipFile(file, "GBK");//设置压缩文件的编码方式为GBKEnumeration<ZipEntry> entris = zipFile.getEntries();ZipEntry zipEntry = null;File tmpFile = null;BufferedOutputStream bos = null;InputStream is = null;byte[] buf = new byte[1024];int len = 0;while (entris.hasMoreElements()) {zipEntry = entris.nextElement();tmpFile = new File(dir + zipEntry.getName());File father = new File(tmpFile.getParent());if (!father.exists()){father.mkdirs();}if (zipEntry.isDirectory()) {//当前文件为目录if (!tmpFile.exists()) {tmpFile.mkdir();}} else {if (!tmpFile.exists()) {tmpFile.createNewFile();}is = zipFile.getInputStream(zipEntry);bos = new BufferedOutputStream(new FileOutputStream(tmpFile));while ((len = is.read(buf)) > 0) {bos.write(buf, 0, len);}bos.flush();bos.close();}}
/*** 压缩tar.gz包* @param files    文件* @param destPath 目的路径*/public void doTarGZ(File[] files, String destPath)throws IOException {/** 定义一个TarArchiveOutputStream 对象*/File tarFile = new File(destPath);FileOutputStream fos = new FileOutputStream(tarFile);BufferedOutputStream bos = new BufferedOutputStream(fos);TarArchiveOutputStream taos = new TarArchiveOutputStream(bos);byte[] buf = new byte[1024];for (File child : files) {if (child.isFile()) { // 文件FileInputStream fis = new FileInputStream(child);BufferedInputStream bis = new BufferedInputStream(fis);TarArchiveEntry tae = new TarArchiveEntry(child.getName());tae.setSize(child.length());taos.putArchiveEntry(tae);int len;while ((len = bis.read(buf)) > 0) {taos.write(buf, 0, len);}bis.close();taos.flush();taos.closeArchiveEntry();continue;}}//建立压缩文件输出流FileOutputStream gzFile = new FileOutputStream(destPath + ".gz");//建立gzip压缩输出流GZIPOutputStream gzout = new GZIPOutputStream(gzFile);//打开需压缩文件作为文件输入流File file = new File(destPath);FileInputStream tarin = new FileInputStream(file);int len;while ((len = tarin.read(buf)) != -1) {gzout.write(buf, 0, len);}gzout.close();gzFile.close();tarin.close();//删除tar包保留tar.gzfile.delete();}
/**
*tar.gz解压缩
*/
public static void doUnTarGz(File srcfile, String destpath)throws IOException {byte[] buf = new byte[1024];FileInputStream fis = new FileInputStream(srcfile);BufferedInputStream bis = new BufferedInputStream(fis);GzipCompressorInputStream cis = new GzipCompressorInputStream(bis);TarArchiveInputStream tais = new TarArchiveInputStream(cis);TarArchiveEntry tae = null;int pro = 0;while ((tae = tais.getNextTarEntry()) != null) {File f = new File(destpath + "/" + tae.getName());if (tae.isDirectory()) {f.mkdirs();} else {/** 父目录不存在则创建*/File parent = f.getParentFile();if (!parent.exists()) {parent.mkdirs();}FileOutputStream fos = new FileOutputStream(f);BufferedOutputStream bos = new BufferedOutputStream(fos);int len;while ((len = tais.read(buf)) != -1) {bos.write(buf, 0, len);}bos.flush();bos.close();}}tais.close();}

Android中zip,tar.gz压缩与解压缩相关推荐

  1. python程序实现:linux环境下,将一个文件夹内的所有.tar.gz压缩文件解压缩到同名子文件夹内,没有子文件夹时重新建立同名子文件夹,使得它们相互独立。

    # 命名为untar.pyimport tarfile import os# 获得目录下的所有文件 def get_file_name(file_dir):L = []for root, dirs, ...

  2. TAR GZ 压缩,解压缩命令

    01-.tar格式 解包:[*******]$ tar xvf FileName.tar 打包:[*******]$ tar cvf FileName.tar DirName(注:tar是打包,不是压 ...

  3. tar.gz文件怎么解压缩_如何解压缩tar.gz文件

    tar.gz文件怎么解压缩 如果您使用开源软件,则有时可能会遇到.tar文件. 开源tar存档实用程序自1979年以来一直存在,因此它在POSIX世界中确实无处不在. 它的目的很简单:它将一个或多个文 ...

  4. tar命令-压缩,解压缩文件

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

  5. linux如何生成tar文件内容,linux如何使用tar命令创建Tar.Gz压缩文件

    在Linux操作系统中,可以使用tar命令创建tar归档文件.本文介绍linux如何使用tar命令创建Tar.Gz压缩文件. tar存档是一个文件,用于存储其他文件的集合,包括有关它们的信息,例如所有 ...

  6. linux 的gz命令详解,linux tar.gz压缩解压命令详解

    linux tar.gz命令是一个常见的文件解压缩命令,那么它具体用法是怎样的呢?下面由 小编为大家整理了linux tar.gz命令的相关知识,希望对大家有帮助! 1.linux tar.gz压缩命 ...

  7. tar.gz压缩与解压命令

    解压命令: tar zxvf 文件名.tar.gz 压缩命令: tar zcvf 文件名.tar.gz 待压缩的文件名 z:通过gzip支持压缩或解压缩.还有其他的压缩或解压缩方式,比如j表示bzip ...

  8. linux解压tar.gz文件,linux tar.gz压缩解压命令详解

    linux tar.gz命令是一个常见的文件解压缩命令,那么它具体用法是怎样的呢?下面由学习啦小编为大家整理了linux tar.gz命令的相关知识,希望对大家有帮助! 1.linux tar.gz压 ...

  9. linux如何生成tar文件内容,在Linux系统中创建tar.gz文件的方法及实例讲解

    本文介绍在Linux系统中创建tar.gz文件的方法,及实例讲解. 介绍 tar存档是一个文件,用于存储其他文件的集合,包括有关它们的信息,例如所有权.权限和时间戳. 在Linux操作系统中,可以使用 ...

最新文章

  1. 使用git更新github上的开源项目
  2. 线上java JVM问题排查
  3. Hive的Security配置
  4. python getattr调用自己模块_在Python中通过getattr获取对象引用的方法
  5. 聚类 K-Means Using Python
  6. web dynpro配置注意事项
  7. python 中用什么键缩进 —— tab 还是空格?
  8. Java Web学习总结-文件下载
  9. 正确绑定键盘事件_事件为何重要以及如何正确处理
  10. gan通过python实现_python通过requests库实现爬虫(二)
  11. SQL 存储过程中,将串连的字符串当表用。
  12. 自己实现java I/O中的BufferedReader对象中的raedLine方法
  13. python画3d图-使用python绘制3d的图形
  14. Linux 如何打开pyo文件,Python的文件类型
  15. java 题库管理系统_JAVA WEB 题库管理系统
  16. linux异步io缺陷,具有libaio性能问题的Linux异步IO
  17. react18新特性
  18. 修复Windows 7升级Windows 10后Japanese输入法无法使用的Bug
  19. 大数据时代的 10 个重大变化
  20. 【雅思大作文考官范文】——第十四篇:festivals essay

热门文章

  1. 解决“为硬件保留的内存”过大,优化电脑反应速度。
  2. [养静气] - 安得静心有洞天
  3. 微PE工具箱怎么卸载(win10)
  4. ARFoundation入门到精通 - 1.1 ARFoundation 简介
  5. 货运APP产品魔力=卓越功能×情感诉求
  6. 社区团购怎么解决 “配送最后一公里”
  7. 卡尔曼滤波估计小车匀加速运动
  8. 生产者-消费者问题(操作系统)
  9. 618,你秒的不是巨额优惠,是云
  10. 用遗传算法求解多旅行推销员问题的新方法