java压缩成.tar_java压缩tar.gz | 学步园

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);

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/304579.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

CentOS 介绍

CentOS是Community ENTerprise Operating System的简称,我们有很多人叫它社区企业操作系统,不管你怎么叫它,它都是linux的一个发行版本。CentOS并不是全新的linux发行版,倘若一说到RedHat这个大名,大家似乎都听过&…

Newbe.Claptrap 0.9.4 发布,全新构建

Newbe.Claptrap 0.9.4 发布,全新构建,全新内容,全新体验。简介 此次的版本更新虽然只是一个副版本更新。但实际上我们带来了非常多全新的内容。全方位将本框架带入到一个新的次代。我们希望我们的努力可以为在业务中需要 Actor 模式的开发者带…

【知识贴】战争中的数学应用

一、方程在海湾战争中的应用

Android Donut SDK 1.6r1 今日发布

Google今天公布了新版Android SDK,也就是Donut的最新1.6版,它可以帮助智能手机应用程序开发商迅速将自己的应用转换到Android系统上. SDK的发布有助于Google为自己寻找到更多的合作伙伴,为自己的Android Market添加人气,目前Donut已经可以下载. 下载:Android 1.6 SDK

java让对象分配在栈上_java – Hotspot何时可以在堆栈上分配对象?

我做了一些实验,以便了解Hotspot何时可以进行堆栈分配.事实证明,它的堆栈分配比基于available documentation的预期要有限得多.Choi“Escape Analysis for Java”引用的文章表明,只分配给局部变量的对象总是可以堆栈分配.但事实并非如此.所有这些都是当前Hotspot实现的实现细节…

开始CSRebot

写代码很久了了,时不时想把这些年学到的,用到的,或自己感悟到的,汇总一下,形成一个东西,或资料,或工具。但每当开始时就一片空白,总是觉得这些大家都会,这些只是自己片面…

toast弹窗_Android 开发(一):Toast弹窗与获取控件的值

前言:本人也是刚接触Android开发,自己也在摸索中,在实现功能的过程中走了不少弯路,其中很重要的原因之一就是查询不到想要的内容,所以想把自己的经验分享出来。首先是Toast的应用,直接上关键代码。Toast to…

魔性十足的数学动态图,这种东西都拿出来分享?

小编最近发现了一组超美的与数学有关的动态图,而且看久了简直就有魔性,实在是按耐不住激动的心情,秉持着好图齐分享的原则,在这里和大家一起分享一波~>>>>来源:蒋迅的博客

Command模式

作用: 将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤消的操作. UML结构图: 解析: Comnand模式的思想是把命令封装在一个类中,就是这里的Command基类,同时把接收对象也封装在一个类中就是这里的Receiver 类中,由调用…

Dapr微服务应用开发系列4:状态管理构件块

Dapr微服务应用开发系列0:概述Dapr微服务应用开发系列1:环境配置Dapr微服务应用开发系列2:Hello World与SDK初接触Dapr微服务应用开发系列3:服务调用构件块题记:这篇介绍状态管理构件块,这个概念相对于微服…

输出螺旋数字正方形java_Java实现顺时针输出螺旋二维数组的方法示例

最近看到一道有点意思的逻辑算法题,便着手实现一下。题目是要求打印 出N*N顺时针螺旋数组,规律如下:// 1 2 3 4 5// 16 17 18 19 6// 15 24 25 20 7// 14 23 22 21 8// 13 12 11 10 9Java 实现示例代码如下:import java.util.Scan…

开线程插数据_python笔记7-多线程之线程同步(锁lock)

前言丨关于吃火锅的场景,小伙伴并不陌生,前面几章笔记里面我都有提到,今天我们吃火锅的场景:吃火锅的时候a同学往锅里下鱼丸,b同学同时去吃掉鱼丸,有可能会导致吃到生的鱼丸。为了避免这种情况,…

一文读懂欧拉函数

欧拉函数φ(N)表示小于或等于N的正整数中与N互质的数的个数。又称φ函数、欧拉商数。下面介绍欧拉函数的几个性质:我们根据这几个性质就可以求出欧拉函数。基本思路是首先置φ(N)N,然后再枚举素数p,将p的整数倍的欧拉函数φ(kp)进行如下操作。…

windows 7在工作组模式下管理 Hyper-V

之前在工作组模式下win7来管理server core 下的hyper-v一直不成功,server core下的相应的防火墙端口也已开放但hyper管理器就是无法和hyper-v主机通讯在2008R2下没有问题,现把解决的过程记录下来,以备后查。1、下载Windows 7 远程服务器管理工…

打工就是 “演戏”,你可以认真,但别太当真

这是头哥侃码的第235篇原创时间飞逝,2021年的春节假期已经结束了。在我的记忆中,以前每逢春节的时候,身边的亲戚和朋友们都会非常忙碌,什么聚个餐,串个门呀,什么拜个年,打个牌啦……但从去年开始…

java多线程adb安装apk卡死_多线程方式安装apk

# -*- coding:utf-8 -*-# 1.获取连接设备的机器ip# 2.获取需要安装的apk# 3.对每一台机器安装apk# 4.检查apk安装是否成功# 5.安装完成import os,subprocessimport _thread#获取设备ip地址,并连接result0def connectDevice(dress):检查设别是否连接成功,…

2018年的第一个工作日,推荐几个优质公众号

2017刚过去不久,我们迎来了2018。工作、生活节奏超快的今天,想要不断提升自我,碎片化阅读学习是你最佳的选择,如果你有一颗学习的心,那这些学习型的公众号,绝对会让你受益匪浅。小编为你精选了技术领域几个…

redis session java获取attribute_redis里的数据结构

Redis作为当前使用非常广泛的内存数据库,在代码层面做了很多极致的优化,已获取更好的性能。其中重要的一部分,就是对于底层数据结构的使用。Redis会根据数据量、数据大小等来优化对于不同结构的使用,从而获得更佳的运行效率和内存…

.NET 云原生架构师训练营(模块二 基础巩固 安全)--学习笔记

2.8 安全认证 VS 授权ASP .NET Core 认证授权中间件认证JWT 认证授权认证 VS 授权认证是一个识别用户是谁的过程授权是一个决定用户可以干什么的过程401 Unauthorized 未授权403 Forbidden 禁止访问ASP .NET Core 认证授权中间件在接收到请求之后,认证(A…

从Banner入手保护linux系统服务器

一,ftp服务Banner修改法: wu-ftp修改 用十六进制文本编辑器修改/usr/sbin/in.ftpd文件,找到如下几行:/var/log/lastlogCould not write %.100s:%.100sVersion wu-2.6.1-16改成:Microsoft FTP Service(Version.6…