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

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

    3.tar.gz或.tgz通常是指将文件打包到一个tar文件中,并将它使用Gzip进行压缩。 一、将两个文件打包到tar.gz 下面的这个例子是将2个文件打包为tar.gz压缩文件。下文代码中的流操作使用了try-with- resources语法,...

    Java压缩解压缩tar.gz

    使用Java对文件夹压缩成tar.gz文件,使用Java对tar.gz压缩文件解压。

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

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

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

    1、压缩当前目录下文件夹/文件test到test.tar.gz: tar -zcvf test.tar.gz test 2、解压缩当前目录下的file.tar.gz到file: tar -zxvf file.tar.gz 参数详解 五个命令中必选一个  -c: 建立压缩档案  -x:解压 ...

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

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

    压缩-解压文件ZIP程序

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

    linux下压缩解压缩命令

    这条命令是将当前文件夹下的所有.jpg文件打成一个tar包,并且将其用gzip压缩,生成一个gzip压缩过的包,包名为all.tar.gz。 # tar -czf all.tar.gz * 这条命令是将当前文件夹下的所有文件(包括子文件夹及其文件)打...

    Linux下压缩与解压命令详解

    本文为大家分享了Linux下压缩与解压缩命令,供大家参考,具体内容....tar.gz 和 .tgz 解压:tar -zxvf FileName.tar.gz 压缩:tar -zcvf FileName.tar.gz DirName 压缩多个文件:tar -zcvf FileName.tar.gz DirName1 Di

    Linux常用的压缩和解压缩命令

    介绍了linux各种压缩文件的解压问题,.gz 解压 1:gunzip FileName.gz 解压 2:gzip -d FileName.gz 压缩:gzipFileName .tar.gz 和 .tgz 解压:tar zxvf FileName....

    reportlab-2.5.tar.gz

    reportlab-2.5.tar.gz 压缩文件 解压后将其内的reportlab文件夹拷贝到site-package下

    ImageMagick-7.1.0-14.tar.gz免费压缩版

    这个zip是ImageMagick-7.1.0-14.tar.gz解压后的文件夹的压缩,可以直接用winscp拉入服务器再安装

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

    def extract_tar_files(src_dir,des_dir): files = os.listdir(src_dir) for file in files: dir_tmp = os.path.join(src_dir, file) print dir_tmp if not os.path.isdir(dir_tmp): ##是文件,非文件夹 #解压...

    redis-4.0.1.tar.gz+安装笔记

    执行命令 tar -zxvf redis-4.0.1.tar.gz 解压到当前文件夹下 进入redis文件夹下 cd redis-4.0.1 依次执行 make sudo make install 安装完成 2、后台启动服务器: nohup redis-server & 不会启用 redis.conf配置...

    Python解压.tar.gz文件

    显示.tar.gz文件夹中的文件: import tarfile filename = 文件1.gz tf = tarfile.open(filename) print(tf.getnames()) 运行即可解压压缩包到D:/Learn/目的文件夹中: import tarfile filename = 文件1.tar.gz tf =...

    jdk-8u341-linux-aarch64.tar.gz

    jdk-8u341-linux-aarch64.tar.gz 由于限制,tar.gz已解压成文件夹,并再次压缩成zip文件

    Linux 下解压 rar 文件的方法

    2. 使用 tar 命令 解压 (*.tar 用 tar –xvf ) Downloads tar -xvf rarlinux-x64-5.6.0.tar.gz 3. 进入文件夹make (需要 管理员权限) rar cat makefile #####################################################...

    DB2_V9.7在linux上安装教程

    一、 解压压缩文件Extra 1、tar -xzvf db2exc_nlpack_970_LNX_x86.tar.gz 得到文件夹nlpack 2、tar -xzvf v9.7_linuxia32_server.tar.gz 得到文件夹server 二、 语言包整合 cp -r nlpack/* ./server/ 三、 安装 1...

    RAR 压缩神器 RAR for Android v5.20.Build 29完美汉化

    RAR for Android 是来自RARLAB的官方版本,是PC端 winrar 的姐妹,支持创建RAR和ZIP压缩文件,能够轻松解压RAR, RAR5, ZIP, TAR, GZ, BZ2, XZ, 7z, ISO, ARJ等格式的文件,是手机端不可多得的神器! 主要功能: - ...

Global site tag (gtag.js) - Google Analytics