`
wdhdmx
  • 浏览: 304974 次
  • 性别: Icon_minigender_1
  • 来自: 山西
博客专栏
D4bbb5f7-9aa4-3e66-8194-f61b3f0241c2
天天编程
浏览量:22019
社区版块
存档分类
最新评论

GZ通过tar压缩和解压文件夹

阅读更多

查了好长时间,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\\");
	}
}
  • ant.jar (1.3 MB)
  • 下载次数: 18
分享到:
评论

相关推荐

    使用Java API进行tar.gz文件及文件夹压缩解压缩.docx

    ame()); tOut.putArchiveEntry(tarEntry);...通过引入该库,我们可以轻松地在 Java 程序中实现文件和文件夹的压缩与解压缩功能。在实际开发中,注意错误处理、资源管理以及安全性等方面,以确保程序的健壮性和安全性。

    windows下tar打包软件_TAR压缩解压

    本文将详细介绍如何在Windows环境下使用TAR打包软件进行打包、压缩和解压。 首先,我们需要安装一个支持`.tar`格式的工具。7-Zip是一款免费且功能强大的压缩软件,它不仅支持多种压缩格式,也包括对`.tar`的支持。...

    文件、文件夹的压缩与解压工具类,支持rar、zip、tar、tar.gz格式的压缩与解压.7z

    文件、文件夹的压缩与解压工具类,支持rar、zip、tar、tar.gz格式的压缩与解压.7z

    CentOS下tar打包解压详解(解压到指定文件夹)

    tar -zxvf /home/zjx/aa.tar.gz -C /home/zjx/pf tar [-cxtzjvfpPN] 文件与目录…. 参数: -c :建立一个压缩文件的参数指令(create 的意思); -x :解开一个压缩文件的参数指令! -t :查看tarfile 里面的文件...

    详解linux下tar压缩解压缩文件夹的命令与参数

    - **压缩当前目录下的 `test` 文件夹到 `test.tar.gz`**: ```bash tar -zcvf test.tar.gz test ``` - **解压缩 `file.tar.gz` 到当前目录**: ```bash tar -zxvf file.tar.gz ``` - **查看 `test.tar.gz` ...

    gz文件解压命令linux-WinRAR解压tar.gz压缩文件报错的解决方案.docx

    Linux 和 Windows 下 tar.gz 文件解压命令及 WinRAR 解压报错解决方案 Linux 和 Windows 作为两大主流操作系统,各有其特点和优缺。今天,我们将讨论在 Linux 和 Windows 系统中如何解压 tar.gz 文件,包括使用 ...

    Java压缩解压缩tar.gz

    `tar.gz`是一种常见的文件打包格式,它结合了`tar`(归档)和`gzip`(压缩)两种技术,广泛应用于Linux和Unix系统,但在Java中也能很好地处理。本篇文章将详细探讨如何使用Java来对文件夹进行`tar.gz`的压缩与解压缩...

    linux下tar和zip压缩效率

    本文旨在通过实际案例对比分析`tar`和`zip`这两种压缩工具在Linux环境下压缩文件的效果,包括压缩后的文件大小变化以及对磁盘空间的节约程度,从而帮助用户更好地根据实际情况选择合适的压缩工具。 #### 实验准备 -...

    数据压缩与解压库zlib

    1. `zlib-1.3.1.tar.gz`:这是一个使用GNU tar进行打包,并通过gzip进行压缩的文件。`.tar`是一种用于归档多个文件和目录的格式,而`.gz`表示它已经过gzip的压缩处理。开发者通常使用这种格式来分发源代码,因为它...

    Postman-linux-x64-5.3.0.tar.gz,Ubuntu下进入解压后文件夹,直接点解Postman就可以运行

    `.tar.gz` 文件实际上是两个压缩格式的结合:`tar` 用于打包多个文件或目录,而 `.gz` 是Gzip的压缩方式。解压步骤如下: 1. 打开终端(Terminal)。 2. 使用 `cd` 命令导航到包含压缩文件的目录,例如:`cd ~/...

    golang 文件夹压缩解压代码

    在Golang中,处理文件和...通过这些库,我们可以轻松地在程序中实现文件和文件夹的压缩与解压功能。在实际项目中,可能还需要考虑错误处理、多线程处理、进度显示等高级特性,但以上代码已经提供了一个基础的实现框架。

    Go语言压缩和解压缩tar.gz文件的方法

    本文实例讲述了Go语言压缩和解压缩tar.gz文件的方法。分享给大家供大家参考。具体分析如下: golang处理压缩包,最常用的就是tar.gz了,这里写了一个测试一下。 压缩文件: 代码如下:package main import (  “fmt”...

    最新版7-zip windows下解压tar.gz 文件 7-zip 工具

    这类文件在Linux中很常见,通常包含了多个文件和目录,通过`tar`命令打包,然后用`gzip`工具进行压缩。对于Windows用户来说,解压`.tar.gz`文件可能并不直观,因为Windows内置的压缩工具不支持这种格式。这时,就...

    Linux 压缩某个文件夹的实现方法

    例子:把/xahot文件夹打包后生成一个/home/xahot.tar.gz的文件。 zip 压缩方法: 压缩当前的文件夹 zip -r ./xahot.zip ./* -r表示递归 zip [参数] [打包后的文件名] [打包的目录路径] 解压 unzip xahot.zip 不...

    linux下tar解压缩指令小结

    **解压到指定文件夹**:`tar zxvf FileName.tar.gz -C DirName` 这里的“-C”选项允许用户指定解压的目标目录。 **压缩**:`tar zcvf FileName.tar.gz DirName` 此命令将DirName目录下的内容打包并压缩成FileName....

    压缩-解压文件ZIP程序

    程序通过在VS2005环境下,调用ICSharpCode.SharpZipLib组件,使用C#语言开发完成。 主要实现: 1、可无限配置压缩及解压缩任务,...2、压缩和解压过程中,可通过过滤条件分别压缩和解压; 3、界面友好,通过大量测试。

    python解压TAR文件至指定文件夹的实例

    5. 对于文件,进一步检查它是否以`.gz`结尾,这通常表示TAR文件已经通过gzip进行了压缩。然后,查找文件名中是否包含特定字符串(`cs.Port_week_perfer_name_start`),这是根据上下文可能自定义的条件。 6. 使用`...

    Linux常用的压缩与解压.pdf

    3. tar压缩解压 tar是一种常用的打包工具,使用tar可以将一个或多个文件和文件夹打包到一个文件中。例如,要将文件test1、test2、test3打包到文件test.tar中,可以使用命令“tar -cvf test.tar test1 test2 test3”...

    php-5.3.28.tar.gz

    这种压缩格式结合了tar(用于打包多个文件)和gzip(用于压缩数据)的优点,便于存储和传输。 标题“php-5.3.28.tar.gz”表明这是一个针对PHP 5.3.28的源代码包,采用了Linux系统常用的tar.gz压缩方式。PHP 5.3系列...

Global site tag (gtag.js) - Google Analytics