zlib、gzip、zip这三个概念的确比较容易混淆:

zlib是一种数据压缩程序库,它的设计目标是处理单纯的数据(而不管数据的来源是什么)。

gzip是一种文件压缩工具(或该压缩工具产生的压缩文件格式),它的设计目标是处理单个

的文件。gzip在压缩文件中的数据时使用的就是zlib。为了保存与文件属性有关的信息,gz

ip需要在压缩文件(*.gz)中保存更多的头信息内容,而zlib不用考虑这一点。但gzip只适

用于单个文件,所以我们在UNIX/Linux上经常看到的压缩包后缀都是*.tar.gz或*.tgz,也

就是先用tar把多个文件打包成单个文件,再用gzip压缩的结果。

zip是适用于压缩多个文件的格式(相应的工具有PkZip和WinZip等),因此,zip文件还要

进一步包含文件目录结构的信息,比gzip的头信息更多。但需要注意,zip格式可采用多种

压缩

Java SDK提供了对上述三种压缩技术的支持:Inflater类和Deflater类直接用zlib库对数据压缩/

解压缩,GZIPInputStream类和GZIPOutputStream类提供了对gzip格式的支持,ZipFile、Zi

pInputStream、ZipOutputStream则用于处理zip格式的文件。

所以,你应当根据你的具体需求,选择不同的压缩技术:如果只需要压缩/解压缩数据,你

可以直接用zlib实现,如果需要生成gzip格式的文件或解压其他工具的压缩结果,你就必须

用gzip或zip等相关的类来处理了。

下面是我的程序,把一个文件夹下的文件先打包成一个tar文件,然后再用gzip压缩。

java 代码

/**

* 压缩文件成Gzip格式,Linux上可使用

* 压缩文件夹生成后缀名为".gz"的文件并下载

* @param folderPath,要压缩的文件夹的路径

* @param zipFilePath,压缩后文件的路径

* @param zipFileName,压缩后文件的名称

* @throws BizException

* */

publicstaticvoidCompressedFiles_Gzip(String folderPath, String   targzipFilePath, String targzipFileName)

{

File srcPath =newFile(folderPath);

intlength=srcPath.listFiles().length;

byte[] buf =newbyte[1024];//设定读入缓冲区尺寸

File[] files   =   srcPath.listFiles();

try

{

//建立压缩文件输出流

FileOutputStream fout=newFileOutputStream(targzipFilePath);

//建立tar压缩输出流

TarOutputStream tout=newTarOutputStream(fout);

for(inti=0;i

{

String filename=srcPath.getPath()+File.separator+files[i].getName();

//打开需压缩文件作为文件输入流

FileInputStream fin=newFileInputStream(filename);//filename是文件全路径

TarEntry tarEn=newTarEntry(files[i]);//此处必须使用new TarEntry(File file);

tarEn.setName(files[i].getName());//此处需重置名称,默认是带全路径的,否则打包后会带全路径

tout.putNextEntry(tarEn);

intnum;

while((num=fin.read(buf)) != -1)

{

tout.write(buf,0,num);

}

tout.closeEntry();

fin.close();

}

tout.close();

fout.close();

//建立压缩文件输出流

FileOutputStream gzFile=newFileOutputStream(targzipFilePath+".gz");

//建立gzip压缩输出流

GZIPOutputStream gzout=newGZIPOutputStream(gzFile);

//打开需压缩文件作为文件输入流

FileInputStream tarin=newFileInputStream(targzipFilePath);//targzipFilePath是文件全路径

intlen;

while((len=tarin.read(buf)) != -1)

{

gzout.write(buf,0,len);

}

gzout.close();

gzFile.close();

tarin.close();

}catch(FileNotFoundException e)

{

System.out.println(e);

}catch(IOException e)

{

System.out.println(e);

}

java压缩成.tar_java压缩tar.gz | 学步园相关推荐

  1. java 压缩/解压【tar.gz】

    环境 操作系统:win7 java:jdk7 第三方包:commons-compress-1.14.jar 需求 不管是文件夹还是常规文件,实现基本的打包压缩. 思路: ①先把需要压缩的文件,打包成. ...

  2. windows 10 上传文件夹到 Linux服务器 压缩文件夹 到tar.gz格式

    有时候需要把win10上的一个文件夹传到Linux服务器上 简洁的做法是先压缩成 tar.gz 再用xftp上传 其中win端的压缩软件一般无法直接压缩成tar.gz格式 可用在cmd中 用命令压缩: ...

  3. linux备份压缩tgz,linux关于解压和压缩命令 zip rar tar.gz tgz

    linux关于解压和压缩命令 .zip 解压:unzip FileName.zip 压缩:zip FileName.zip DirName .rar 解压:rar -x FileName.zip 压缩 ...

  4. linux安装bz2压缩文件,Linux下*.tar.gz/.tar.bz2 文件解压缩安装命令

    Linux tar 命令 在Linux平台,tar是主要的打包工具.tar命令通常用来把文件和目录压缩为一个文件( tarball 或 tar, gzip 和 bzip). Tar选项: c – 创建 ...

  5. linux安装java tar.gz_Linux(CentOS)安装java运行环境JDK1.8(.tar.gz)

    第一步:官网下载jdk文件 网址:http://www.oracle.com/technetwork/java/javase/downloads/index.html 根据所用服务器linux是32位 ...

  6. java gnu_GNU/Linux下Java开发环境的安装和配置 | 学步园

    首先下载JDK,在http://www.oracle.com/technetwork/java/javase/downloads/index.html下载最新版本的JDK,选择平台为linux,就会得 ...

  7. java构造字符缓冲区_java学习笔记 | 学步园

    一.数组 类型[] 名称=new 类型[长度] 二.字符串2.1字符串类Stringjava.lang.StringString 名称=new String("xxxx")=&qu ...

  8. java 多图片压缩成pdf_Java 压缩PDF中的图片

    import com.spire.pdf.*; import com.spire.pdf.exporting.PdfImageInfo; import com.spire.pdf.graphics.P ...

  9. java实现c#的datetime.ticks_java的Date.getTime()转换成C#的Datetime.ticks | 学步园

    先来个名词解释: Epoch time:指从1970年1月1日零时起到现在为止的"second(秒) 数". 注意我给"second(秒) 数"加了引号,是因为 ...

最新文章

  1. 玩转android自定义控件二——自定义索引栏listview
  2. 软件架构自学笔记-- 畅途亿级业务日志系统演变过程
  3. 作为AI的“辅助大臣”,区块链的前途不可限量
  4. 注解图Annotation
  5. WINCE源代码配置文件
  6. hive mysql编码问题_Hive中文乱码 生产环境问题解决
  7. Permission denied (publickey).
  8. Visio—如何导出文件为图片?
  9. 如何在VS 2010中使用 VS2013的解决方案
  10. HighCharts:PlotLine的label文字不显示
  11. VS2008开发中Windows Mobile 5.0 emulator连网的配置
  12. jmeter json提取器和正则表达式提取器
  13. 字体直链提取器_MIUI主题直链提取器下载-MIUI主题直链提取软件 v1.3.5_5577安卓网...
  14. win7磁盘合并步骤
  15. 使用Ps为图像批量制作水印
  16. NES模拟器开发笔记(001)缘起、资料及开发准备
  17. OA产品:市场需求推动OA发展
  18. 金融核心业务流程整理
  19. 加密文件的识别和破解工具,电子数据勘察取证实验室建设项目-掘密
  20. el-input实现尾部加字

热门文章

  1. AspNetCoreApi 跨域处理(CORS )
  2. 站在巨人肩上的.NET Core 2.1
  3. C# 读取文件内容/输出txt log
  4. Windows11 发布更新 Insider Preview Build 22000.100
  5. [转]Python 列表(List) 的三种遍历(序号和值)方法
  6. 【遥感物候】植被物候与气候(气温和降水)条件的空间相关性分析
  7. Git之撤销add操作
  8. 数据结构之判断一棵树是不是完全二叉树
  9. linux shell之$?和得到联合使用命令的结果
  10. chmod 777 修改权限