Java将文本文件压缩为tar.gz
压缩
思路
- 准备输出流
- FileOutputStream
- BufferedOutputStream
- TarOutputStream
- GZIPOutputStream
- 准备输入流
- FileInputStream
- BufferedInputStream
- 将文件打包为tar
- 在将打包后的tar文件压缩
- 准备输出流
代码
/**
* @功能描述 压缩tar.gz 文件
* @param resourceList 源文件集合
* @param outPath 目标文件
* @return 返回压缩结果
* @throws Exception
*/
@PrintRunTime(function="压缩tar.gz文件")
public static void packet(List<File> resourceList, String outPath) throws Exception {
//1. 参数验证, 初始化输出路径
if(resourceList == null || resourceList.size() < 1 || !Verify.isEmpty(outPath)){
throw new ServiceException("文件压缩执行异常, 非法参数!");
}
long startTime = System.currentTimeMillis();
// 2. 迭代源文件集合, 将文件打包为Tar
try (FileOutputStream fileOutputStream = new FileOutputStream(outPath+".tmp");
BufferedOutputStream bufferedOutput = new BufferedOutputStream(fileOutputStream);
TarOutputStream tarOutputStream = new TarOutputStream(bufferedOutput);) {
for (File resourceFile : resourceList) {
if(!resourceFile.isFile()){
continue;
}
try(FileInputStream fileInputStream = new FileInputStream(resourceFile);
BufferedInputStream bufferedInput = new BufferedInputStream(fileInputStream);){
TarEntry entry = new TarEntry(new File(resourceFile.getName()));
entry.setSize(resourceFile.length());
tarOutputStream.putNextEntry(entry);
IOUtils.copy(bufferedInput, tarOutputStream);
} catch (Exception e) {
throw new ServiceException("文件["+resourceFile+"]压缩执行异常, 嵌套异常: \n" + e.toString());
}finally {
tarOutputStream.closeEntry();
}
}
} catch (Exception e) {
Files.delete(Paths.get(outPath+".tmp"));
throw new ServiceException("文件压缩至["+outPath+"]执行异常, 嵌套异常: \n" + e.toString());
}
//3. 读取打包好的Tar临时文件文件, 使用GZIP方式压缩
try (FileInputStream fileInputStream = new FileInputStream(outPath+".tmp");
BufferedInputStream bufferedInput = new BufferedInputStream(fileInputStream);
FileOutputStream fileOutputStream = new FileOutputStream(outPath);
GZIPOutputStream gzipOutputStream = new GZIPOutputStream(fileOutputStream);
BufferedOutputStream bufferedOutput = new BufferedOutputStream(gzipOutputStream);
) {
byte[] cache = new byte[1024];
for (int index = bufferedInput.read(cache); index != -1; index = bufferedInput.read(cache)) {
bufferedOutput.write(cache,0,index);
}
long endTime = System.currentTimeMillis();
Log.info("文件["+outPath+"]压缩执行完毕, 耗时:" + (endTime - startTime) + "ms");
} catch (Exception e) {
throw new ServiceException("文件压缩至["+outPath+"]执行异常, 嵌套异常: \n" + e.toString());
}finally {
Files.delete(Paths.get(outPath+".tmp"));
}
}
解压
思路
- 准备输入流
- FileInputStream
- BufferedInputStream
- GZIPInputStream
- TarInputStream
- 准备输出流
- FileOutputStream
- 将文件转换为TarInputStream流对象, 输出即可
- 准备输入流
代码
/**
* @功能描述 解压tar.gz文件
* @param targzFile tar.gz压缩文件
* @param outPath 存放解压后文件的目录
* @return 返回结果
* @throws ServiceException
*/
public static void unpack(File targzFile, String outPath) throws ServiceException {
//1. 验证参数, 初始化输出路径
if(targzFile == null || !targzFile.isFile() || !Verify.isEmpty(outPath) || PathHandler.initPath(outPath) == null){
throw new ServiceException("文件解压缩执行异常, 非法参数!");
}
long startTime = System.currentTimeMillis();
//2. 读取tar.gz文件转换为tar文件
try (FileInputStream fileInputStream = new FileInputStream(targzFile);
BufferedInputStream bins = new BufferedInputStream(fileInputStream);
GZIPInputStream gzipInputStream = new GZIPInputStream(bins);
TarInputStream tarIn = new TarInputStream(gzipInputStream, 1024 * 2)) {
//3. 迭代tar文件集合, 解压文件
for (TarEntry entry = tarIn.getNextEntry(); entry != null; entry = tarIn.getNextEntry()){
File targetFileName = new File(outPath + "/" + entry.getName());
IOUtils.copy(tarIn, new FileOutputStream(targetFileName));
}
long endTime = System.currentTimeMillis();
Log.info("文件["+targzFile+"]解压执行完毕, 耗时:" + (endTime - startTime) + "ms");
} catch (Exception e) {
throw new ServiceException("[" + targzFile + "] 解压执行异常, " + e.toString());
}
}
Java将文本文件压缩为tar.gz的更多相关文章
- Delphi - Windows系统下,Delphi调用API函数和7z.dll动态库,自动把文件压缩成.tar.gz格式的文件
项目背景 应欧美客户需求,需要将文件压缩成.tar.gz格式的文件,并上传给客户端SFTP服务器. 你懂的,7-Zip软件的显著特点是文件越大压缩比越高,在Linux系统上相当于我们Windows系统 ...
- java,maven工程打tar.gz包执行main方法
一,需要在pom.xml文件添加plugin, 项目目录结构 <build> <plugins> <plugin> <artifactId>maven- ...
- Windows下将文件打包压缩成 .tar.gz格式
1.下载 “7-ZIP”,安装完成后进入需要打包的文件夹 2. 右击选择“添加到压缩包” 3.压缩格式:tar 4. 得到.tar文件,将其打包 5. 压缩格式为:gzip 6. 得到tar.gz格式 ...
- 把linux文件夹压缩成tar.gz的命令
解压 tar zxvf 文件名.tar.gz 压缩 tar zcvf software.tar.gz /usr/local/software
- 压缩文件tar.gz和zip之间的区别
我们在开发的时候通常要先下载相关的软件或者是源码,或者是jar包.在下载东西的时候总是碰见后缀是.tar.gz和.zip的问题,搞不清楚是怎么回事,不晓得下载哪个文件才是对自己有用的.现在我知道了,其 ...
- Windows下压缩成tar.gz格式
tar.gz 是linux和unix下面比较常用的格式,几个命令就可以把文件压缩打包成tar.gz格式,然而这种格式在windows并不多见,WinRAR.WinZip等主流压缩工具可以释放解开,却不 ...
- 如何将文件压缩成.tar.gz格式的文件
1.下载“7-ZIP“这个软件 2.安装7-ZIP以后,直接在你想要打包的文件上点右键菜单,会有一个7-ZIP的子菜单栏,类似WinRAR和WinZIP的那种右键菜单.然后选“7-ZIP”->“ ...
- tar压缩文件 .tar.gz
打包并压缩文件 tar -zcf ansible.tar.gz ansible/* z gzip属性 c 建立压缩文件 f 指定文件名 v 显示过程 解压文件 tar xzf ...
- linux 文件打包压缩成.tar.gz
tar czvf beian.drcluod.cn.20180509.tar.gz ./beian.drcloud.cn/*
随机推荐
- 微信小程序把玩(三十八)获取设备信息 API
原文:微信小程序把玩(三十八)获取设备信息 API 获取设备信息这里分为四种, 主要属性: 网络信息wx.getNetWorkType, 系统信息wx.getSystemInfo, 重力感应数据wx. ...
- delphi7 stringgrid 点列头排序
最近在做stringgrid的项目, 下面delphi7 正常使用,均摘抄网路,但做过细微调整才能正常使用 首先排序的过程 procedure Quicksort(Grid: TStringGrid; ...
- Office Add-in Model 为 Outlook Mail Add-in 提供的 JavaScript API 介绍
本文所讨论的 Mailbox API是指在 Mail Add-in 中可调用的 JavaScript API.开发者可以利用这些API 实现 Add-in 和 Outlook 的交互(数据读取与写入) ...
- UILabel实现自适应宽高需要注意的地方(二)
需求图如下所示 UILabel "上期" 距离屏幕最左边 有35px UILabel "下期" 距离屏幕最右边 有35px 进行中文字在UIlabe ...
- Spring Cloud微服务简介
概述 Spring Cloud给开发者提供一套按照一定套路快速开发分布式工具.它为微服务架构中涉及**配置管理,服务治理,断路器,智能路由,微代理,控制总线,全局锁,分布式会话和集群状态等操作提供了一 ...
- python实现常用查找算法
http://www.cnblogs.com/feixuelove1009/p/6148357.html
- spring源码解析之IOC容器(三)——依赖注入
上一篇主要是跟踪了IOC容器对bean标签进行解析之后存入Map中的过程,这些bean只是以BeanDefinition为载体单纯的存储起来了,并没有转换成一个个的对象,今天继续进行跟踪,看一看IOC ...
- 简单介绍几种Java后台开发常用框架组合
01 前言 Java框架一直以来都是面试必备的知识点,而掌握Java框架,不管在成熟的大公司,快速发展的公司,还是创业阶段的公司,都能对当前正在开发中的系统有整体的认知,从而更好的熟悉和学习技术,这篇 ...
- Kafka 学习之路(三)—— Kafka生产者详解
一.生产者发送消息的过程 首先介绍一下Kafka生产者发送消息的过程: Kafka会将发送消息包装为ProducerRecord对象, ProducerRecord对象包含了目标主题和要发送的内容,同 ...
- 无法启动print spooler服务,错误2,系统找不到指定的文件
来自百度: 无法启动print spooler服务,错误2,系统找不到指定的文件 我的打印机无法运行:出现"打印后台程序没有执行"提示.查:print spooler没有启动.点击 ...