`
lengchaotian
  • 浏览: 278526 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

解压tar.gz文件包

    博客分类:
  • java
 
阅读更多
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.zip.GZIPInputStream;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;

import org.apache.commons.compress.archivers.ArchiveInputStream;
import org.apache.commons.compress.archivers.ArchiveStreamFactory;
import org.apache.commons.compress.archivers.tar.TarArchiveEntry;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

 

public class GZip
{
    // 日志对象
    private static Log logger = LogFactory.getLog(GZip.class);
    
    /**
     * <解压tar包>
     * <该方法只适用于解压tar包>
     * @param rarFileName 需要解压的文件路径(具体到文件)
     * @param destDir 解压目标路径
     * @return 执行结果
     * @see [类、类#方法、类#成员]
     */
    public static boolean unTargzFile(String rarFileName, String destDir, List<String> fileNames)
    {
        try
        {
            if (!Global.isEmpty(rarFileName) && !Global.isEmpty(destDir))
            {
                Global.mkdirs(destDir);
                return unGzipFile(rarFileName, destDir, fileNames);
            }
            return false;
        }
        catch (Exception e)
        {
            logger.error(Global.LOG_EXCEPTION_NAME, e);
            return false;
        }
    }
    
    /**
     * <解压zip包>
     * <该方法只适用于解压zip包>
     * @param rarFileName 需要解压的文件路径(具体到文件)
     * @param destDir 解压目标路径
     * @return 执行结果
     * @see [类、类#方法、类#成员]
     */
    public static void unZipFile(String rarFileName, String destDir, List<String> fileNames)
    {
        try
        {
            if (!Global.isEmpty(rarFileName) && !Global.isEmpty(destDir))
            {
                Global.mkdirs(destDir);
                ReadZip(rarFileName, destDir, fileNames);
            }
        }
        catch (Exception e)
        {
            logger.error(Global.LOG_EXCEPTION_NAME, e);
        }
    }
    
    /**
     * <解压缩文件>
     * <解压标准gzip格式的压缩包>
     * @param zipfileName 需要解压的文件路径(具体到文件)
     * @param outputDirectory 解压目标路径
     * @see [类、类#方法、类#成员]
     */
    private static boolean unGzipFile(String zipfileName, String outputDirectory, List<String> fileNames)
    {
        FileInputStream fis = null;
        ArchiveInputStream in = null;
        BufferedInputStream bis = null;
        try
        {
            fis = new FileInputStream(zipfileName);
            GZIPInputStream gis = new GZIPInputStream(new BufferedInputStream(fis));
            in = new ArchiveStreamFactory().createArchiveInputStream("tar", gis);
            bis = new BufferedInputStream(in);
            TarArchiveEntry entry = (TarArchiveEntry)in.getNextEntry();
            while (entry != null)
            {
                String name = entry.getName();
                String[] names = name.split("/");
                String fileName = outputDirectory;
                for (int i = 0; i < names.length; i++)
                {
                    String str = names[i];
                    fileName = fileName + File.separator + str;
                }
                if (name.endsWith("/"))
                {
                    Global.mkdirs(fileName);
                }
                else
                {
                    File file = getRealFileName(outputDirectory, name);
                    if (null != fileNames)
                    {
                        fileNames.add(file.getName());
                    }
                    BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(file));
                    int b = -1;
                    while ((b = bis.read()) != -1)
                    {
                        bos.write(b);
                    }
                    bos.flush();
                    bos.close();
                }
                entry = (TarArchiveEntry)in.getNextEntry();
            }
            return true;
        }
        catch (Exception e)
        {
            logger.error(Global.LOG_EXCEPTION_NAME, e);
            return false;
        }
        finally
        {
            try
            {
                if (null != bis)
                {
                    bis.close();
                }
            }
            catch (IOException e)
            {
                logger.error(Global.LOG_EXCEPTION_NAME, e);
            }
        }
    }
    
    /**
     * <解压缩zip包>
     * <功能详细描述>
     * @param unzipPath
     * @param zippath
     * @see [类、类#方法、类#成员]
     */
    public static void ReadZip(String unzipPath, String zippath, List<String> fileNames)
    {
        try
        {
            BufferedOutputStream dest = null;
            FileInputStream fis = new FileInputStream(unzipPath);
            ZipInputStream zis = new ZipInputStream(new BufferedInputStream(fis));
            ZipEntry entry = null;
            while ((entry = zis.getNextEntry()) != null)
            {
                String name = entry.getName();
                String[] names = name.split("/");
                String fileName = zippath;
                for (int i = 0; i < names.length; i++)
                {
                    String str = names[i];
                    fileName = fileName + File.separator + str;
                }
                if (name.endsWith("/"))
                {
                    Global.mkdirs(fileName);
                }
                else
                {
                    int count;
                    byte data[] = new byte[2048];
                    File file = getRealFileName(zippath, name);
                    if (null != fileNames)
                    {
                        fileNames.add(file.getName());
                    }
                    dest = new BufferedOutputStream(new FileOutputStream(file));
                    
                    while ((count = zis.read(data, 0, 2048)) != -1)
                    {
                        dest.write(data, 0, count);
                    }
                    dest.flush();
                    dest.close();
                }
            }
            zis.close();
        }
        catch (Exception e)
        {
            logger.error(Global.LOG_EXCEPTION_NAME, e);
        }
    }
    
    /** 
    * 给定根目录,返回一个相对路径所对应的实际文件对象
    * @param zippath 指定根目录 
    * @param absFileName 相对路径名,来自于ZipEntry中的name 
    * @return File 实际的文件 
    */
    private static File getRealFileName(String zippath, String absFileName)
    {
        String[] dirs = absFileName.split("/", absFileName.length());
        
        File ret = new File(zippath);// 创建文件对象 
        
        if (dirs.length > 1)
        {
            for (int i = 0; i < dirs.length - 1; i++)
            {
                ret = new File(ret, dirs[i]);
            }
        }
        
        if (!ret.exists())
        {
            // 检测文件是否存在 
            ret.mkdirs();// 创建此抽象路径名指定的目录 
        }
        
        // 根据 ret 抽象路径名和 child 路径名字符串创建一个新 File 实例
        ret = new File(ret, dirs[dirs.length - 1]);
        
        return ret;
    }
    
    public static void main(String[] args)
    {
        List<String> unzipOne = new ArrayList<String>();
        List<String> unzipTwo = new ArrayList<String>();
        GZip.unTargzFile("F:/fap.8.tar.gz", "F:/111", unzipOne);
        int size = unzipOne.size();
        for (int i = 0; i < size; i++)
        {
            GZip.unTargzFile("F:/111/" + unzipOne.get(i), "F:/222", unzipTwo);
        }
    }
}

 

分享到:
评论
2 楼 1339344944 2017-06-30  
czb6788782 写道
亲,你这Global类能给一份么

1 楼 czb6788782 2015-10-26  
亲,你这Global类能给一份么

相关推荐

    使用Java API进行tar.gz文件及文件夹压缩解压缩.docx

    3.tar.gz或.tgz通常是指将文件打包到一个tar文件中,并将它使用Gzip进行压缩。 一、将两个文件打包到tar.gz 下面的这个例子是将2个文件打包为tar.gz压缩文件。下文代码中的流操作使用了try-with- resources语法,...

    java读取tar.gz压缩文件的jar包

    java读取tar.gz压缩文件的jar包

    redis-4.0.6.tar.gz linux安装包

    1.解压文件获得redis-4.0.6.tar包 2.redis-4.0.6.tar拷贝到服务器 3.cd /mnt 4.解压至任一目录 tar xzf redis-4.0.6.tar.gz

    mha4mysql-node-0.56.tar.gz和mha4mysql-manager-0.56.tar.gz

    mha必备包mha4mysql-node-0.56.tar.gz和mha4mysql-manager-0.56.tar.gz,2积分不多欢迎下载,方便大众。文件是个压缩包,解压后是两个文件。

    jdk-8u181-linux-i586.tar.gz 64位

    tar -xzvf file.tar.gz //解压tar.gz tar -xjvf file.tar.bz2 //解压 tar.bz2 tar –xZvf file.tar.Z //解压tar.Z unrar e file.rar //解压rar unzip file.zip //解压zip 总结 1、*.tar 用 tar –xvf 解压 2、*.gz ...

    JDK1.8安装包文件 jdk-8u231-linux-x64.tar.gz

    Centos7离线安装文件 jdk-8u231-linux-x64.tar.gz压缩包 免费下载,现在博客都是付费文件,搞得头大,现在免费分享

    jdk-8u401-linux-x64.tar.gz.7z

    7z文件包需要解压哦:jdk-8u401-linux-x64.tar.gz

    jdk-8u201-linux-x64.tar.gz

    此jdk为解压版,无需安装。下载后先在本地将zip包解压,再将后将jdk-8u201-linux-x64.tar.gz文件上传到linux服务器,用tar -zxvf jdk-8u60-linux-x64.tar.gz命令解压,解压后按照教程配置环境变量即可。

    VMwareTools-9.6.2-1688356.tar.gz

    2. 解压tar包: $ tar xzf VMwareTools-9.6.2-1688356.tar.gz 3. 进入vmware-tools-distrib目录: $ cd vmware-tools-distrib 4. 执行vmware-install.pl文件: $ sudo ./vmware-install.pl 5. 一路打Enter Shared ...

    vsftpd-3.0.3-edit.tar.gz.tar

    tar -zxvf vsftpd-3.0.3.tar.gz.tar 2、修改Makefile文件 vim Makefile CC=arm-none-linux-gnueabi-gcc 3、执行make,已修复以下错误 make (1)错误提示:/bin/sh:./vsf_findlibs.sh: Permission denied 解决措施:...

    tcl8.6.1-src.tar.gz redis-4.0.9.tar.gz

    在Tcl的软件包包含工具命令语言,强大的通用脚本语言。...而 Redis 源码包中直接提供了 Makefile 文件,所以在解压完软件包后,可直接进入解压后的软件包 目录,执行 make 与 make install 命令进行安装。

    jdk8.tar.gz

    linux下安装Jdk1.8,直接解压,将安装包放在自定义的文件夹下,在/etc/profile文件下修改内容,然后更新资源就可以使用了。

    python3.6.5.tar.gz

    python3.6.5源码编译的包,直接创建链接即可使用,请大家下载吧

    py2neo-py2neo-2.0.8.tar.gz.zip包

    解压得到py2neo-py2neo-2.0.8.tar.gz,cmd切换到文件目录,执行pip install py2neo-py2neo-2.0.8.tar.gz 安装哦~

    openssh8.5.p1.tar.gz 快速升级

    OpenSSH 命令注入漏洞(CVE-2020-15778),文件包含installs.sh、openssh-8.5p1.tar.gz、openssl-1.1.1i.tar.gz、zlib-1.2.11.tar.gz。升级时候将openssh.tar.gz放至/home下解压,进入openssh目录,执行chmod +x ...

    MySQL 5.6.25 源码包+安装方法 (mysql-5.6.25.tar.gz)

    首先解压mysql-5.6.25.tar: $ tar xf mysql-5.6.25.tar ------------------ Mysql 源码安装操作: 1. 创建用户 # groupadd mysql # useradd -g -r mysql mysql 2. 解压缩tar包 # tar xf mysql-5.6.25.tar.gz # cd...

    mysql-5.7.25-linux-glibc2.12-x86_64.tar.gz

    mysql-5.7.25-linux-glibc2.12-x86_64.tar.gz linux 安装mysql,的工具包,解压安装

    ACE+TAO-6.5.0.tar.gz

    linux下OpenDDS环境搭建,所需的软件包,ACE+TAO-6.5.0.tar.gz。 解压,创建环境变量,创建文件等等操作可百度,这里不再赘述,外网下载慢,这里提供快速的下载包,本人编译可通过。

    Linux下常用压缩格式的压缩与解压方法.doc

    解压:tar zxvf FileName.tar.gz 压缩:tar zcvf FileName.tar.gz DirName --------------------------------------------- .bz2 解压1:bzip2 -d FileName.bz2 解压2:bunzip2 FileName.bz2 压缩: bzip2 -z ...

    hadoop1.0.0.tar.gz

    hadoop1.0.0.1 安装包,linux 平台

Global site tag (gtag.js) - Google Analytics