• How to untar a TAR file using Apache Commons


    import org.apache.commons.compress.archivers.tar.TarArchiveEntry;
    import org.apache.commons.compress.archivers.tar.TarArchiveInputStream;
    import org.apache.commons.compress.compressors.CompressorInputStream;
    import org.apache.commons.compress.compressors.gzip.GzipCompressorInputStream;
    import org.apache.commons.io.FileUtils;
    import org.apache.commons.io.IOUtils;
    import org.apache.commons.io.LineIterator;
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    
    import java.io.*;
    import java.nio.charset.Charset;
    
    public class IOHelper {
    
        public static final Logger LOGGER = LoggerFactory.getLogger(IOHelper.class);
    
        public static void uncompressTarGZ(File tarFile, File dest) throws IOException {
            boolean mkdirs = dest.mkdirs();
            if (!mkdirs) {
                LOGGER.warn("Unable to create directory '{}'", dest.getAbsolutePath());
                return;
            }
    
            BufferedInputStream inputStream = new BufferedInputStream(new FileInputStream(tarFile));
            GzipCompressorInputStream gcis = new GzipCompressorInputStream(inputStream);
            try (TarArchiveInputStream tais = new TarArchiveInputStream(gcis)) {
                TarArchiveEntry entry;
                while ((entry = tais.getNextTarEntry()) != null) {// create a file with the same name as the entry
                    File desFile = new File(dest, entry.getName());
                    if (entry.isDirectory()) {
                        boolean mkDirs = desFile.mkdirs();
                        if (!mkDirs) {
                            LOGGER.warn("Unable to create directory '{}'", desFile.getAbsolutePath());
                        }
                    } else {
                        boolean createNewFile = desFile.createNewFile();
                        if (!createNewFile) {
                            LOGGER.warn("Unable to create file '{}'", desFile.getCanonicalPath());
                            continue;
                        }
                        try (BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(desFile));) {
    //                        IOUtils.copy(tais, bos);
                            byte[] btoRead = new byte[1024];
                            int len;
                            while ((len = tais.read(btoRead)) != -1) {
                                bos.write(btoRead, 0, len);
                            }
                        }
                    }
                }
                LOGGER.info("Untar completed successfully!");
            }
        }
    
    
        public static void printTarGzFile(File tarFile) throws IOException {
            BufferedInputStream bin = new BufferedInputStream(FileUtils.openInputStream(tarFile));
            CompressorInputStream cis = new GzipCompressorInputStream(bin);
    
            try (TarArchiveInputStream tais = new TarArchiveInputStream(cis)) {
                TarArchiveEntry entry;
                while ((entry = tais.getNextTarEntry()) != null) {
                    if (entry.isDirectory()) {
                        LOGGER.warn("dir:{}", entry.getName());
                    } else {
                        int size = (int) entry.getSize();
                        byte[] content = new byte[size];
                        int readCount = tais.read(content, 0, size);
                        LOGGER.info("fileName:{}", entry.getName());
                        ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(content, 0, readCount);
                        LineIterator iterator = IOUtils.lineIterator(byteArrayInputStream, Charset.forName("utf-8"));
                        try {
                            while (iterator.hasNext()) {
                                LOGGER.info("line:{}", iterator.nextLine());
                            }
                        } finally {
                            LineIterator.closeQuietly(iterator);
                        }
                    }
                }
                LOGGER.info("===============finish===============");
            }
        }
    }

    https://commons.apache.org/proper/commons-compress/examples.html

    http://stackoverflow.com/questions/7128171/how-to-compress-decompress-tar-gz-files-in-java

    https://commons.apache.org/proper/commons-io/description.html

  • 相关阅读:
    Java基础教程:Java内存区域
    Java基础教程:多线程基础——线程池
    微服务实践:服务治理
    微服务实践:服务设计
    微服务实践:什么是微服务
    SpringBoot学习笔记:读取配置文件
    Java进阶教程:使用Lombok提升开发效率
    Sagas模式
    执行力:Just Do It
    执行力:Just Do It
  • 原文地址:https://www.cnblogs.com/softidea/p/6756341.html
Copyright © 2020-2023  润新知