java 解压 tar.z_Java解压tar.Z文件(使用Apache Commons-compress)

这里使用apache commons compress对.tar.Z格式文件进行解压。

对于一个文件test.tar.Z,我们可以将解压过程理解为:

将test.tar.Z解压为test.tar;

将test.tar解压为test。

解压.Z文件示例:

InputStream fin = Files.newInputStream(Paths.get("archive.tar.Z"));

BufferedInputStream in = new BufferedInputStream(fin);

OutputStream out = Files.newOutputStream(Paths.get("archive.tar"));

ZCompressorInputStream zIn = new ZCompressorInputStream(in);

final byte[] buffer = new byte[buffersize];

int n = 0;

while (-1 != (n = zIn.read(buffer))) {

out.write(buffer, 0, n);

}

out.close();

zIn.close();

解压tar文件示例:

Adding an entry to a tar archive:

TarArchiveEntry entry = new TarArchiveEntry(name);

entry.setSize(size);

tarOutput.putArchiveEntry(entry);

tarOutput.write(contentOfEntry);

tarOutput.closeArchiveEntry();

Reading entries from an tar archive:

TarArchiveEntry entry = tarInput.getNextTarEntry();

byte[] content = new byte[entry.getSize()];

LOOP UNTIL entry.getSize() HAS BEEN READ {

tarInput.read(content, offset, content.length - offset);

}

apache commons compress的maven地址如下:

org.apache.commons

commons-compress

1.16.1

测试程序:

package test;

import java.io.BufferedInputStream;

import java.io.File;

import java.io.FileInputStream;

import java.io.FileOutputStream;

import java.io.IOException;

import java.io.InputStream;

import java.io.OutputStream;

import java.nio.file.Files;

import java.nio.file.Paths;

import java.util.ArrayList;

import java.util.List;

import org.apache.commons.compress.archivers.tar.TarArchiveEntry;

import org.apache.commons.compress.archivers.tar.TarArchiveInputStream;

import org.apache.commons.compress.compressors.z.ZCompressorInputStream;

import org.apache.commons.compress.utils.IOUtils;

public class TestUncompressTarZ {

public static void compressTest() throws IOException {

// 将tar.Z解压为tar

System.out.println("uncompress tar.Z to tar...");

InputStream fin = Files.newInputStream(Paths.get("D:\\test.tar.Z"));

BufferedInputStream in = new BufferedInputStream(fin);

OutputStream out = Files.newOutputStream(Paths.get("D:\\test.tar"));

ZCompressorInputStream zIn = new ZCompressorInputStream(in);

byte[] buffer = new byte[1024];

int n = 0;

while (-1 != (n = zIn.read(buffer))) {

out.write(buffer, 0, n);

}

out.close();

zIn.close();

System.out.println("uncompress tar.Z to tar finished!");

// 将tar解压为文件夹

System.out.println("uncompress tar to directory file...");

List fileNames = new ArrayList();

InputStream inputStream = new FileInputStream(new File("D:\\test.tar"));

TarArchiveInputStream tarIn = new TarArchiveInputStream(inputStream, 1024);

TarArchiveEntry entry = null;

while ((entry = tarIn.getNextTarEntry()) != null) {

System.out.println("... " + entry.getName() + " , " + entry.isDirectory());

fileNames.add(entry.getName());

if (entry.isDirectory()) {//是目录

File tmpDir = new File("D:\\test\\" + entry.getName());

if (tmpDir.exists() == false) {

tmpDir.mkdirs();

}

} else {//是文件

File tmpFile = new File("D:\\test\\" + entry.getName());

File tmpDir = tmpFile.getParentFile();

System.out.println("parent: " + tmpDir.getAbsolutePath());

if (tmpDir.exists() == false) {

tmpDir.mkdirs();

}

OutputStream outputStream = new FileOutputStream(tmpFile);

int length = 0;

byte[] b = new byte[1024];

while ((length = tarIn.read(b)) != -1) {

outputStream.write(b, 0, length);

}

}

}

IOUtils.closeQuietly(tarIn);

System.out.println("uncompress tar to directory file finished!");

System.out.println("all finished!");

}

public static void main(String[] args) throws IOException {

compressTest();

}

}

在这个测试程序中,首先将test.tar.Z解压为test.tar,然后将test.tar解压为一个名为test的文件。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值