查了好长时间,java中好像GZ只可以压缩单个文件。
根据网上的资料,用tar过度,写了一个完整的压缩和解压。
只是功能的实现,压缩的文件夹下面不能有文件夹,只能有文件,传入的目录必须存在,最后解压的目录也必须存在。
要导入一个包 ant.jar,我上传了,在附件里
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.util.zip.GZIPInputStream;
import java.util.zip.GZIPOutputStream;
import org.apache.tools.tar.TarEntry;
import org.apache.tools.tar.TarInputStream;
import org.apache.tools.tar.TarOutputStream;
public class GZyasuojieya {
private static int BUFFER = 1024 * 4;
private static byte[] B_ARRAY = new byte[BUFFER];
/**
* file变为tar文件
*/
private static void file2tar(String filesPath, String tarPath) {
File fileDirectory = new File(filesPath);
int length = fileDirectory.listFiles().length;
File[] files = fileDirectory.listFiles();
try {
File tarFile = new File(tarPath);
tarFile.createNewFile();
FileOutputStream fout = new FileOutputStream(tarFile);
TarOutputStream tout = new TarOutputStream(fout);
for (int i = 0; i < length; i++) {
String filename = fileDirectory.getPath() + File.separator
+ files[i].getName();
FileInputStream in = new FileInputStream(filename);
TarEntry tarEn = new TarEntry(files[i]);
tarEn.setName(files[i].getName());
tout.putNextEntry(tarEn);
int num;
while ((num = in.read(B_ARRAY)) != -1) {
tout.write(B_ARRAY, 0, num);
}
tout.closeEntry();
in.close();
}
tout.close();
fout.close();
} catch (FileNotFoundException e) {
System.out.println(e);
} catch (IOException e) {
System.out.println(e);
}
}
/**
* 传入tar的文件路径,产生GZ包
*
* @return
*/
public static void tar2gz(String tarPath, String gzPath) {
File srcFile = new File(tarPath);
File targetFile = new File(gzPath);
try {
FileInputStream in = null;
GZIPOutputStream out = null;
in = new FileInputStream(srcFile);
out = new GZIPOutputStream(new FileOutputStream(targetFile));
int number = 0;
while ((number = in.read(B_ARRAY, 0, BUFFER)) != -1) {
out.write(B_ARRAY, 0, number);
}
in.close();
out.close();
} catch (Exception e) {
System.out.println(e);
}
}
/**
* gz包变为tar文件
*/
public static void gz2tar(String gzPath, String tarPath) {
try {
GZIPInputStream gzin = new GZIPInputStream(new FileInputStream(
gzPath));
OutputStream out = new FileOutputStream(tarPath);
int number = 0;
while ((number = gzin.read(B_ARRAY, 0, BUFFER)) != -1) {
out.write(B_ARRAY, 0, number);
}
gzin.close();
out.close();
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* tar 文件变为files
*/
public static void tar2files(String tarPath, String filesPath) {
try {
FileOutputStream out = null;
TarInputStream in = new TarInputStream(new FileInputStream(tarPath));
TarEntry entry = null;
File outFile = null;
while ((entry = in.getNextEntry()) != null) {
outFile = new File(filesPath + entry.getName());
outFile.createNewFile();
out = new FileOutputStream((outFile));
int number;
while ((number = in.read(B_ARRAY, 0, BUFFER)) != -1) {
out.write(B_ARRAY, 0, number);
}
// while (true) {
// int readsize = in.read(B_ARRAY);
// out.write(B_ARRAY);
// if (readsize < BUFFER) {
// break;
// }
// }
}
out.close();
in.close();
} catch (Exception e) {
}
}
public static void main(String args[]) {
String filesPath = "D:\\123";
String tarPath = "D:\\123.tar";
String gzPath = "D:\\123.tar.gz";
file2tar(filesPath, tarPath);
tar2gz(tarPath,gzPath);
gz2tar(gzPath, tarPath);
tar2files(tarPath, "D:\\123\\");
}
}
分享到:
相关推荐
ame()); tOut.putArchiveEntry(tarEntry);...通过引入该库,我们可以轻松地在 Java 程序中实现文件和文件夹的压缩与解压缩功能。在实际开发中,注意错误处理、资源管理以及安全性等方面,以确保程序的健壮性和安全性。
本文将详细介绍如何在Windows环境下使用TAR打包软件进行打包、压缩和解压。 首先,我们需要安装一个支持`.tar`格式的工具。7-Zip是一款免费且功能强大的压缩软件,它不仅支持多种压缩格式,也包括对`.tar`的支持。...
tar -zxvf /home/zjx/aa.tar.gz -C /home/zjx/pf tar [-cxtzjvfpPN] 文件与目录…. 参数: -c :建立一个压缩文件的参数指令(create 的意思); -x :解开一个压缩文件的参数指令! -t :查看tarfile 里面的文件...
- **压缩当前目录下的 `test` 文件夹到 `test.tar.gz`**: ```bash tar -zcvf test.tar.gz test ``` - **解压缩 `file.tar.gz` 到当前目录**: ```bash tar -zxvf file.tar.gz ``` - **查看 `test.tar.gz` ...
Linux 和 Windows 下 tar.gz 文件解压命令及 WinRAR 解压报错解决方案 Linux 和 Windows 作为两大主流操作系统,各有其特点和优缺。今天,我们将讨论在 Linux 和 Windows 系统中如何解压 tar.gz 文件,包括使用 ...
`tar.gz`是一种常见的文件打包格式,它结合了`tar`(归档)和`gzip`(压缩)两种技术,广泛应用于Linux和Unix系统,但在Java中也能很好地处理。本篇文章将详细探讨如何使用Java来对文件夹进行`tar.gz`的压缩与解压缩...
本文旨在通过实际案例对比分析`tar`和`zip`这两种压缩工具在Linux环境下压缩文件的效果,包括压缩后的文件大小变化以及对磁盘空间的节约程度,从而帮助用户更好地根据实际情况选择合适的压缩工具。 #### 实验准备 -...
1. `zlib-1.3.1.tar.gz`:这是一个使用GNU tar进行打包,并通过gzip进行压缩的文件。`.tar`是一种用于归档多个文件和目录的格式,而`.gz`表示它已经过gzip的压缩处理。开发者通常使用这种格式来分发源代码,因为它...
`.tar.gz` 文件实际上是两个压缩格式的结合:`tar` 用于打包多个文件或目录,而 `.gz` 是Gzip的压缩方式。解压步骤如下: 1. 打开终端(Terminal)。 2. 使用 `cd` 命令导航到包含压缩文件的目录,例如:`cd ~/...
在Golang中,处理文件和...通过这些库,我们可以轻松地在程序中实现文件和文件夹的压缩与解压功能。在实际项目中,可能还需要考虑错误处理、多线程处理、进度显示等高级特性,但以上代码已经提供了一个基础的实现框架。
本文实例讲述了Go语言压缩和解压缩tar.gz文件的方法。分享给大家供大家参考。具体分析如下: golang处理压缩包,最常用的就是tar.gz了,这里写了一个测试一下。 压缩文件: 代码如下:package main import ( “fmt”...
这类文件在Linux中很常见,通常包含了多个文件和目录,通过`tar`命令打包,然后用`gzip`工具进行压缩。对于Windows用户来说,解压`.tar.gz`文件可能并不直观,因为Windows内置的压缩工具不支持这种格式。这时,就...
例子:把/xahot文件夹打包后生成一个/home/xahot.tar.gz的文件。 zip 压缩方法: 压缩当前的文件夹 zip -r ./xahot.zip ./* -r表示递归 zip [参数] [打包后的文件名] [打包的目录路径] 解压 unzip xahot.zip 不...
**解压到指定文件夹**:`tar zxvf FileName.tar.gz -C DirName` 这里的“-C”选项允许用户指定解压的目标目录。 **压缩**:`tar zcvf FileName.tar.gz DirName` 此命令将DirName目录下的内容打包并压缩成FileName....
程序通过在VS2005环境下,调用ICSharpCode.SharpZipLib组件,使用C#语言开发完成。 主要实现: 1、可无限配置压缩及解压缩任务,...2、压缩和解压过程中,可通过过滤条件分别压缩和解压; 3、界面友好,通过大量测试。
5. 对于文件,进一步检查它是否以`.gz`结尾,这通常表示TAR文件已经通过gzip进行了压缩。然后,查找文件名中是否包含特定字符串(`cs.Port_week_perfer_name_start`),这是根据上下文可能自定义的条件。 6. 使用`...
3. tar压缩解压 tar是一种常用的打包工具,使用tar可以将一个或多个文件和文件夹打包到一个文件中。例如,要将文件test1、test2、test3打包到文件test.tar中,可以使用命令“tar -cvf test.tar test1 test2 test3”...
这种压缩格式结合了tar(用于打包多个文件)和gzip(用于压缩数据)的优点,便于存储和传输。 标题“php-5.3.28.tar.gz”表明这是一个针对PHP 5.3.28的源代码包,采用了Linux系统常用的tar.gz压缩方式。PHP 5.3系列...
Linux 操作系统下常用的压缩扩展名有.tar、.tar.bz2、.tar.gz 等,本文将介绍 Ubuntu 下压缩与解压的格式、工具与命令。 一、Linux 下常用的压缩格式 Linux 操作系统下常用的压缩扩展名有.tar、.tar.bz2、.tar.gz ...