查了好长时间,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\\");
}
}
分享到:
相关推荐
3.tar.gz或.tgz通常是指将文件打包到一个tar文件中,并将它使用Gzip进行压缩。 一、将两个文件打包到tar.gz 下面的这个例子是将2个文件打包为tar.gz压缩文件。下文代码中的流操作使用了try-with- resources语法,...
使用Java对文件夹压缩成tar.gz文件,使用Java对tar.gz压缩文件解压。
本文实例讲述了Go语言压缩和解压缩tar.gz文件的方法。分享给大家供大家参考。具体分析如下: golang处理压缩包,最常用的就是tar.gz了,这里写了一个测试一下。 压缩文件: 代码如下:package main import ( “fmt”...
1、压缩当前目录下文件夹/文件test到test.tar.gz: tar -zcvf test.tar.gz test 2、解压缩当前目录下的file.tar.gz到file: tar -zxvf file.tar.gz 参数详解 五个命令中必选一个 -c: 建立压缩档案 -x:解压 ...
例子:把/xahot文件夹打包后生成一个/home/xahot.tar.gz的文件。 zip 压缩方法: 压缩当前的文件夹 zip -r ./xahot.zip ./* -r表示递归 zip [参数] [打包后的文件名] [打包的目录路径] 解压 unzip xahot.zip 不...
程序通过在VS2005环境下,调用ICSharpCode.SharpZipLib组件,使用C#语言开发完成。 主要实现: 1、可无限配置压缩及解压缩任务,...2、压缩和解压过程中,可通过过滤条件分别压缩和解压; 3、界面友好,通过大量测试。
这条命令是将当前文件夹下的所有.jpg文件打成一个tar包,并且将其用gzip压缩,生成一个gzip压缩过的包,包名为all.tar.gz。 # tar -czf all.tar.gz * 这条命令是将当前文件夹下的所有文件(包括子文件夹及其文件)打...
本文为大家分享了Linux下压缩与解压缩命令,供大家参考,具体内容....tar.gz 和 .tgz 解压:tar -zxvf FileName.tar.gz 压缩:tar -zcvf FileName.tar.gz DirName 压缩多个文件:tar -zcvf FileName.tar.gz DirName1 Di
介绍了linux各种压缩文件的解压问题,.gz 解压 1:gunzip FileName.gz 解压 2:gzip -d FileName.gz 压缩:gzipFileName .tar.gz 和 .tgz 解压:tar zxvf FileName....
reportlab-2.5.tar.gz 压缩文件 解压后将其内的reportlab文件夹拷贝到site-package下
这个zip是ImageMagick-7.1.0-14.tar.gz解压后的文件夹的压缩,可以直接用winscp拉入服务器再安装
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): ##是文件,非文件夹 #解压...
执行命令 tar -zxvf redis-4.0.1.tar.gz 解压到当前文件夹下 进入redis文件夹下 cd redis-4.0.1 依次执行 make sudo make install 安装完成 2、后台启动服务器: nohup redis-server & 不会启用 redis.conf配置...
显示.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 由于限制,tar.gz已解压成文件夹,并再次压缩成zip文件
2. 使用 tar 命令 解压 (*.tar 用 tar –xvf ) Downloads tar -xvf rarlinux-x64-5.6.0.tar.gz 3. 进入文件夹make (需要 管理员权限) rar cat makefile #####################################################...
一、 解压压缩文件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 for Android 是来自RARLAB的官方版本,是PC端 winrar 的姐妹,支持创建RAR和ZIP压缩文件,能够轻松解压RAR, RAR5, ZIP, TAR, GZ, BZ2, XZ, 7z, ISO, ARJ等格式的文件,是手机端不可多得的神器! 主要功能: - ...