首页 > 编程知识 正文

tar.gz文件压缩命令,targz文件怎么解压

时间:2023-05-04 11:50:27 阅读:184218 作者:868

在开发中我们经常需要对gz文件进行解压缩,在java中解压gz文件还是比较繁琐的,为此写了一个工具类方便需要的时候可以直接拿过来用。代码如下:

package com.eggsl.utils;import org.apache.commons.compress.archivers.tar.TarArchiveEntry;import org.apache.commons.compress.archivers.tar.TarArchiveInputStream;import org.apache.commons.compress.utils.IOUtils;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;import java.io.OutputStream;import java.util.zip.GZIPInputStream;/** * @author: xiaobaitu88 * @Date: 2019/10/23 21:19 * @Description: */public class FileUtils { private static final Logger LOGGER = LoggerFactory.getLogger(FileUtils.class); public static void main(String[] args) { deCompressGZipFile("D:\hello2.tar.gz", "D:\ssl"); } /** * Tar文件解压方法 * * @param tarGzFile 要解压的压缩文件名称(绝对路径名称) * @param destDir 解压后文件放置的路径名(绝对路径名称)当路径不存在,会自动创建 * @return 解压出的文件列表 */ public static void deCompressGZipFile(String tarGzFile, String destDir) { // 建立输出流,用于将从压缩文件中读出的文件流写入到磁盘 TarArchiveEntry entry = null; TarArchiveEntry[] subEntries = null; File subEntryFile = null; try (FileInputStream fis = new FileInputStream(tarGzFile); GZIPInputStream gis = new GZIPInputStream(fis); TarArchiveInputStream taris = new TarArchiveInputStream(gis);) { while ((entry = taris.getNextTarEntry()) != null) { StringBuilder entryFileName = new StringBuilder(); entryFileName.append(destDir).append(File.separator).append(entry.getName()); File entryFile = new File(entryFileName.toString()); if (entry.isDirectory()) { if (!entryFile.exists()) { entryFile.mkdir(); } subEntries = entry.getDirectoryEntries(); for (int i = 0; i < subEntries.length; i++) { try (OutputStream out = new FileOutputStream(subEntryFile)) { subEntryFile = new File(entryFileName + File.separator + subEntries[i].getName()); IOUtils.copy(taris, out); } catch (Exception e) { LOGGER.error("deCompressing file failed:" + subEntries[i].getName() + "in" + tarGzFile); } } } else { checkFileExists(entryFile); OutputStream out = new FileOutputStream(entryFile); IOUtils.copy(taris, out); out.close(); //如果是gz文件进行递归解压 if (entryFile.getName().endsWith(".gz")) { deCompressGZipFile(entryFile.getPath(), destDir); } } } //如果需要刪除之前解压的gz文件,在这里进行 } catch (Exception e) { LOGGER.warn("decompress failed", e); } } public static void checkFileExists(File file) { //判断是否是目录 if (file.isDirectory()) { if (!file.exists()) { file.mkdir(); } } else { //判断父目录是否存在,如果不存在,则创建 if (file.getParentFile() != null && !file.getParentFile().exists()) { file.getParentFile().mkdirs(); } try { file.createNewFile(); } catch (IOException e) { e.printStackTrace(); } } }}

工具类依赖:

<dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-compress</artifactId> <version>1.19</version></dependency>

 

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。