- 浏览: 89611 次
- 性别:
- 来自: 上海
文章分类
最新评论
生成XXX.tar.gz压缩文件有两种方式,可以先打包后压缩,还可以打包压缩同时进行。
所用到的jar包见附件,若用maven,pom.xml文件内容如下:
所用到的jar包见附件,若用maven,pom.xml文件内容如下:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.it.bill</groupId> <artifactId>bill_project.gi</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>war</packaging> <name>bill_project.gi</name> <url>http://maven.apache.org</url> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.10</version> </dependency> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.8</version> </dependency> <dependency> <groupId>javax.mail</groupId> <artifactId>mail</artifactId> <version>1.4</version> </dependency> <dependency> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> <version>2.4</version> </dependency> <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-compress</artifactId> <version>1.5</version> </dependency> </dependencies> </project>
package com.bill; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.FilenameFilter; import java.io.IOException; import java.util.zip.GZIPOutputStream; import org.apache.commons.compress.archivers.tar.TarArchiveEntry; import org.apache.commons.compress.archivers.tar.TarArchiveOutputStream; import org.apache.commons.compress.compressors.CompressorException; import org.apache.commons.compress.compressors.CompressorOutputStream; import org.apache.commons.compress.compressors.CompressorStreamFactory; import org.apache.commons.compress.utils.IOUtils; import org.apache.commons.io.FileUtils; public class TestCompressSnapshotFiles { public static void main(String[] args) { try { String sourceFileDirPath = "C:/opt/webhost/pn/testCompressSnapshotXmlFiles/tempFileDir/"; File sourceFileDir = new File(sourceFileDirPath); if (sourceFileDir.isDirectory()) { File[] sourceFileArr = sourceFileDir.listFiles(new FilenameFilter() { public boolean accept(File dir, String name) { return name.endsWith(".xml"); } }); /** * the first way, packaging before they are compressed */ String targetFilePath = "C:/opt/webhost/pn/testCompressSnapshotXmlFiles/firstCompressedPackage.tar"; File targetFile = new File(targetFilePath); File tarFile = packSnapshotXmlFiles(sourceFileArr, targetFile); compressSnapshotXmlFiles(tarFile); /** * the second way, packaging and compression at the same time */ targetFilePath = "C:/opt/webhost/pn/testCompressSnapshotXmlFiles/secondCompressedPackage.tar.gz"; targetFile = new File(targetFilePath); packAndCompressSnapshotXmlFiles(sourceFileArr, targetFile); } else { System.err.println("This is not folder: " + sourceFileDirPath); } System.out.println("----- Compress snapshot xml files end. ----"); } catch (Exception e) { e.printStackTrace(); } } private static void packAndCompressSnapshotXmlFiles(File[] sourceFileArr, File targetFile) throws IOException, CompressorException { FileOutputStream fileOutputStream = null; CompressorOutputStream gzippedOut = null; TarArchiveOutputStream taos = null; try { fileOutputStream = FileUtils.openOutputStream(targetFile); gzippedOut = new CompressorStreamFactory().createCompressorOutputStream( CompressorStreamFactory.GZIP, fileOutputStream); taos = new TarArchiveOutputStream(gzippedOut); for (File perFile : sourceFileArr) { System.out.println( "current file name: " + perFile.getName() + ", length: " + perFile.length() / 1024); TarArchiveEntry tae = new TarArchiveEntry(perFile, perFile.getName()); taos.putArchiveEntry(tae); taos.write(FileUtils.readFileToByteArray(perFile)); taos.closeArchiveEntry(); } } catch (IOException ioe) { throw ioe; } catch (CompressorException ce) { throw ce; } finally { if (taos != null) { try { taos.close(); } catch (IOException e) { } } if (gzippedOut != null) { try { gzippedOut.close(); } catch (IOException e) { } } } } private static void compressSnapshotXmlFiles(File tarFile) throws IOException { File target = new File(tarFile.getAbsolutePath() + ".gz"); FileInputStream fis = null; GZIPOutputStream gzipOs = null; try { fis = new FileInputStream(tarFile); gzipOs = new GZIPOutputStream(new FileOutputStream(target)); /*byte[] buffer = new byte[1024]; int n = -1; while((n = fis.read(buffer)) != -1) { gzipOs.write(buffer, 0, n); }*/ IOUtils.copy(fis, gzipOs); // delete the template tar file tarFile.deleteOnExit(); } catch (FileNotFoundException fnfe) { System.err.println("file not found: " + tarFile.getAbsolutePath()); throw fnfe; } catch (IOException ioe) { System.err.println("create gizp output stream fail"); throw ioe; } finally { if (fis != null) { try { fis.close(); } catch (IOException e) { } } if (gzipOs != null) { try { gzipOs.close(); } catch (IOException e) { } } } } private static File packSnapshotXmlFiles(File[] sourceFileArr, File targetFile) throws IOException { FileOutputStream fos = null; TarArchiveOutputStream taos = null; try { fos = new FileOutputStream(targetFile); taos = new TarArchiveOutputStream(fos); for (File perFile : sourceFileArr) { System.out.println("current file name: " + perFile.getName() + ", length: " + perFile.length()/1024); taos.putArchiveEntry(new TarArchiveEntry(perFile, perFile.getName())); IOUtils.copy(new FileInputStream(perFile), taos); //taos.write(FileUtils.readFileToByteArray(perFile)); taos.closeArchiveEntry(); } //This line is very import, otherwise the compressed file can't successfully decompressed taos.finish(); } catch (FileNotFoundException fnfe) { System.err.println("File not found: " + targetFile.getAbsolutePath()); throw fnfe; } catch (IOException ioe) { System.err.println("put archive entry fail."); throw ioe; } finally { if (fos != null) { try { fos.close(); } catch (IOException e) { } } if (taos != null) { try { taos.close(); } catch (IOException e) { } } } return targetFile; } }
- commons-compress-1.5.jar (250.2 KB)
- 下载次数: 2
- commons-io-2.4.jar (180.8 KB)
- 下载次数: 2
- xz-1.2.jar (92.6 KB)
- 下载次数: 1
发表评论
-
Tomcat Servlet request.getRemoteAddr()所得值为0:0:0:0:0:0:0:1
2013-11-08 11:53 1565环境: tomcat5.6 JSP UTF-8 IP协 ... -
追踪应用客户端IP
2013-08-22 09:53 730参考: http://www.knowsky.co ... -
java多线程发送URL请求
2013-07-19 11:32 1205import java.io.Buffered ... -
java启用多进程调用某个类(是class文件)
2013-07-19 11:29 653import java.io.BufferedInpu ... -
支持Window和Linux下tar.gz文件压缩
2013-07-04 19:12 990最近做文件压缩,最后在Window下压缩解压后都可以,可是在W ... -
请慎用java的File#renameTo(File)方法
2013-07-03 12:14 559转自: http://xiaoych.iteye.com/bl ... -
java从tar.gz中抽取某个文件
2013-07-01 15:03 1325File tarGzFile = new File(a ... -
在不同jar文件中有两个同名类是加载的哪一个已经classload
2013-06-24 09:33 1469在Eclipse中加载第一个(通常是lib下面的顺序,但并非一 ... -
Java泛型的使用及List排序
2013-04-19 09:56 975import java.util.ArrayLis ... -
java删除一个文件夹,包括该文件夹下的所有文件夹及文件
2013-04-10 17:42 785要删除的文件必须存在且是一个文件夹,可以根据自己的需求,在调用 ... -
java按照编码读写文件
2013-04-07 09:28 802package d20130406; impor ... -
java字符串中显示双引号
2013-04-19 09:58 1210转: http://www.cnblogs.com/zhish ... -
java写入txt文件
2013-04-19 09:59 640用另一个构造方法FileWriter fileWriter=n ... -
读取文件方法大全
2013-04-25 11:51 284转自: http://www.cnblogs.com/love ... -
Java性能监测
2013-04-15 13:20 571通过jdk自带工具监测: -
Java 32bit JVM Xmx 参数大小限制
2013-03-07 13:26 1424转自: http://stackoverflow.com/qu ... -
Java模拟HTTP发送请求
2013-04-15 13:17 757package com.hp.pn.service; ... -
tomcat配置文件
2013-03-01 13:51 636转自: http://www.cnblogs.com/smil ... -
PermGen space错误解决方法,java.lang.OutOfMemoryError
2013-03-01 11:07 797转自: http://www.cnblogs.com/xwdr ... -
<context-param>与<init-param>的区别与作用
2013-02-28 09:41 567转载: http://www.cnblogs.com/hzj- ...
相关推荐
标题 "node-v12.17.0-headers.tar.gz" 暗示了这是一个针对 Node.js 版本 12.17.0 的头文件压缩包。这个压缩包通常用于开发人员编译和创建与 Node.js C++ 扩展模块相关的项目。Node.js 是一个基于 Chrome V8 引擎的 ...
标题中的"node-v10.21.0-headers.tar.gz"表明这是一款与Node.js相关的软件包,具体是Node.js版本10.21.0的头文件集合,存储格式为tar.gz,这是一种常见的在Linux和Unix系统中使用的归档和压缩格式。头文件在编程中...
标题中的 "subversion-1.6.1.tar.gz" 表示这是一个 Subversion 的特定版本,即 1.6.1 版本,被打包成 tarball 格式(.tar.gz)的文件。 描述中提到的 "包含 subversion-1.6.1.tar.gz、subversion-deps-1.6.1.tar.gz...
对于名为“jdk-8u201-linux-x64.tar.gz”的压缩包,它是专为64位Linux系统设计的。要安装这个JDK,你需要按照以下步骤操作: 1. **下载**:你可以通过Oracle官网或者第三方镜像站点下载到这个文件。在Linux终端中,...
描述中提到的"jdk-8u251-windows-x64.tar.gz"实际上应该是"jre-8u251-windows-x64.tar.gz"的误写,这里应该是描述JRE的文件,而不是Java Development Kit(JDK)。JDK是用于开发和编译Java程序的工具集,包含JRE以及...
标题中的"xxx.tar.gz_BAD"表明这是一个以".tar.gz"为格式的压缩文件,并且被标记为"BAD",这通常意味着该文件可能是有害的或存在问题的。".tar.gz"是一种常见的文件打包和压缩格式,它结合了tar(用于打包多个文件)...
setuptools.tar.gz是一个包含了setuptools源代码的压缩包文件,通常用于在Linux这样的类Unix系统上进行安装。在这个场景中,它被提及是因为在尝试使用pymssql这个Python模块时,可能需要先确保setuptools已经正确...
* gzip -d xxx.gz:解压缩文件 xxx.gz * gzip -r xxx:对文件夹 xxx 进行压缩 * gzip -rd xxx.gz:对文件夹 xxx 进行解压缩 三、bzip2 压缩工具 bzip2 工具与 gzip 工具类似,只是 bzip2 工具负责压缩和解压缩.bz2...
在这个特定的压缩包"LibreOffice-7.4.7-Linux-x86-64-rpm.tar.gz"中,包含的是适用于64位Linux系统的RPM(Red Hat Package Manager)格式的安装文件。 首先,我们来详细了解一下LibreOffice的主要组件和功能: 1. ...
在"cmake-3.21.1-linux-x86_64.tar.gz"这个压缩包中,我们找到了CMake的3.21.1版本,特别针对Linux系统且为x86_64架构。该版本可能包含了以下组件: 1. **bin** 目录:包含可执行文件,如`cmake`、`ccmake`、`cpack...
1. **下载与解压**:首先,你需要从官方或者可靠的源下载“nagios-plugins-2.1.4.tar.gz”文件,然后使用tar命令进行解压,例如`tar -zxvf nagios-plugins-2.1.4.tar.gz`。 2. **编译与安装**:解压后,进入解压后...
首先,"mysql-5.7.26.tar.gz" 是MySQL 5.7.26版本的源代码压缩包,采用的是gzip压缩格式,通常用于Linux或类UNIX系统。`tar`命令用于打包文件,而`gzip`则负责压缩,通过`tar -zxvf`命令可以解压这个压缩包,将源...
在本例中,我们看到的`cmake-2.8.10.tar.gz`是一个压缩包,包含了CMake的源代码版本2.8.10。这个版本相对比较旧,因为当前CMake已经更新到了3.x系列。不过,对于学习CMake的基本概念和用法,以及了解它的历史,这个...
在"struts-1.2.7-lib.tar.gz"压缩包中,包含了Struts框架运行所需的库文件,对于Java Web开发者来说是必不可少的。 首先,我们来看一下`struts-1.2.7-lib`这个目录下的文件,它们主要包括以下几个部分: 1. **核心...
这个压缩包qla2xxx-src-v8.07.00.56.11.3-k1.tar.gz包含了驱动的源代码,供开发者研究、定制和编译,以适应不同环境的需求。 首先,我们来了解下qla2xxx HBA卡。HBA卡是连接服务器或存储设备到光纤通道网络的关键...
这种命名格式表明它是一个使用gzip压缩的tar归档文件,是Linux/Unix系统中常见的打包方式,用于收集多个文件或目录并进行压缩,便于传输和存储。 描述中提到的“dos2unix”是一个经典的工具,用于在DOS/Windows和...
`pip-10.0.1.tar.gz`是一个gzip压缩过的tar文件,这样的打包方式可以有效减小文件体积,便于传输和存储。在Linux或MacOS系统中,可以通过`tar -zxvf pip-10.0.1.tar.gz`命令解压,然后通过`python setup.py install`...
在给定的压缩包"cmake-3.11.0-Linux-x86_64.tar.gz"中,我们找到了CMake的一个预编译版本,适用于Linux操作系统且针对x86_64架构。这个版本是3.11.0,发布于2018年,它包含了CMake的所有组件和必要的库,使得用户...
在"cmake_3.5.1.orig.tar.gz"这个文件中,我们看到的是 CMake 3.5.1 版本的原始源代码压缩包。这个版本发布于2016年,是CMake历史上的一个重要里程碑,它包含了许多改进和新功能。 1. **CMake 3.5.1 的新特性**: ...