java 压缩 tar.gz_java – 使用Commons Compress将目录压缩到tar.gz

凤扬
2023-12-01

我正在使用commons压缩库来创建目录的tar.gz.我有一个目录结构如下.

parent/

child/

file1.raw

fileN.raw

我正在使用以下代码进行压缩.它运行良好,没有例外.但是,当我尝试解压缩tar.gz时,我得到一个名为“childDirToCompress”的文件.它的大小正确,因此文件在tarring过程中显然已经相互附加.所需的输出将是一个目录.我无法弄清楚我做错了什么.任何明智的公共审判者都能把我置于正确的道路上吗?

CreateTarGZ() throws CompressorException, FileNotFoundException, ArchiveException, IOException {

File f = new File("parent");

File f2 = new File("parent/childDirToCompress");

File outFile = new File(f2.getAbsolutePath() + ".tar.gz");

if(!outFile.exists()){

outFile.createNewFile();

}

FileOutputStream fos = new FileOutputStream(outFile);

TarArchiveOutputStream taos = new TarArchiveOutputStream(new GZIPOutputStream(new BufferedOutputStream(fos)));

taos.setBigNumberMode(TarArchiveOutputStream.BIGNUMBER_STAR);

taos.setLongFileMode(TarArchiveOutputStream.LONGFILE_GNU);

addFilesToCompression(taos, f2, ".");

taos.close();

}

private static void addFilesToCompression(TarArchiveOutputStream taos, File file, String dir) throws IOException{

taos.putArchiveEntry(new TarArchiveEntry(file, dir));

if (file.isFile()) {

BufferedInputStream bis = new BufferedInputStream(new FileInputStream(file));

IOUtils.copy(bis, taos);

taos.closeArchiveEntry();

bis.close();

}

else if(file.isDirectory()) {

taos.closeArchiveEntry();

for (File childFile : file.listFiles()) {

addFilesToCompression(taos, childFile, file.getName());

}

}

}

 类似资料: