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/*
随机推荐
- Java Web系列:Spring Boot 基础 Spring Security基本使用
@OneToOne or @ManyToOne Caused by: org.hibernate.AnnotationException: @OneToOne or @ManyToOne on com ...
- 在Windows IoT上生成和识别二维码
在Windows IoT生成和识别二维码,实际上由于是UWP上实现,所以,理论上,这些生成和识别二维码的方法也可以在其它平台上运行. 关于二维码的生成有很多库可以实现,比如QRCoder,这个库可以在 ...
- CWnd和HWND的区别(hWnd只是CWnd对象的一个成员变量,代表与这个对象绑定的窗口)
所有控件类都是CWnd类的派生类,CWnd的所有成员函数在控件类中都可以使用.在MFC中,CWnd类是一个很重要的类,它封装了Windows的窗口句柄HWND.在Windows编程中, ...
- 学在LINUX下编程(各种情况比较详细)
(from http://www.712100.com/bbs/redirect.php?fid=160&tid=191752&goto=nextnewset) 预备知识 用gcc ...
- xe5 for android 地理定位GPS
先上源码,在解释. implementation uses androidapi.jni.JavaTypes, androidapi.jni.Location, FMX.helpers.android ...
- 设置tablewidget自适应列宽和设置自动等宽
在网上很容易知道自适应列宽,100%不留空显示,这里还是提下: /*设置表格是否充满,即行末不留空*/ ui->tableWidget->horizontalHeader()-> ...
- QT5---应用程序发布(使用windeployqt和NSIS)
采用动态编译的方式发布程序,即release版本. 找齐动态依赖库(.dll) 方法一 用Dependency Walker这个工具去找少了那些dll,不过这个工具也不怎么靠谱,一个比较靠谱但 ...
- android核心系列--2,关于任务栈(task)
一,任务 任务是由界面组件组成的一个栈,这些界面组件可以来自多个进程,多个应用,为共同完成一项任务而存在,比如写邮件时会用到邮件应用和联系人应用中的界面组件,这些界面组件在同一个任务中运行. 二,界面 ...
- SQL Server 2012设置某用户对某些表的记录限制其删除操作
第一步:用sa用户进入SSMS: 第二步:在安全性---用户上面点击右键---"属性": 第三步:在选择页中选择”安全对象“,点击”搜索“,弹出添加对象页面,这里默认为特定对象不用 ...
- Windows 10使用Tesseract-OCR出现WindowsError: [Error 2]
Tesseract-OCR安装时默认安装在x86的目录下,手动添加环境变量此电脑-->属性-->高级系统设置-->环境变量,点击系统变量里的Path, 点击编辑,在编辑环境变量界面中 ...