`

java_解压tar.z文件包(*.tar、*.z)

    博客分类:
  • Java
阅读更多

本文转载自 https://blog.csdn.net/Crazyer0214/article/details/78048434

一、文件格式介绍

最近从Linux系统中copy了一个tar。z压缩文件,用于解压测试。

文件格式为*.tar压缩包下,还有*.z压缩包

如:压缩包paid_orderlist_20170920.tar,该tar包下有一个paid_orderlist_20170920.z压缩包,z包下有一个数据文件paid_orderlist_20170920.dat

即如果获取paid_orderlist_20170920.dat文件,需要分别解压tar包和z包。

 

二、文件解压(java实现)

1.前言

目前网络上解压*.tar文件以及其他压缩格式文件的java例子很多,大多都使用的是

commons-compress-1.x.jar或者javatar-2.x.jar工具进行解压操作。但真正实现解压tar.z文件的例子确不多见。

tar.z格式作为linxu中常见压缩文件格式,java实现解压操作可能会在项目中经常遇到。在参照网上例子及个人实践总结后,成功实现了对该文件的解压操作。

2.jar包准备

所需jar包:commons-compress-1.x.jar(网上介绍说需1.7版本及以上,反正亲测1.4版本不行,下载了1.7版本测试成功)

推荐maven下载:

 

  1.  
    <dependency>
  2.  
    <groupId>org.apache.commons</groupId>
  3.  
    <artifactId>commons-compress</artifactId>
  4.  
    <version>1.7</version>
  5.  
    </dependency>

 

可从apache下载https://commons.apache.org/proper/commons-compress/download_compress.cgi 

3.java代码实现

 

 

  1.  
    import org.apache.commons.compress.archivers.tar.TarArchiveEntry;
  2.  
    import org.apache.commons.compress.archivers.tar.TarArchiveInputStream;
  3.  
    import org.apache.commons.compress.compressors.z.ZCompressorInputStream;
  4.  
    import java.io.*;
  5.  
    import java.util.*;
  6.  
    /**
  7.  
    * java解压tar.z文件
  8.  
    */
  9.  
    public class TarZUtil{
  10.  
    public static void main(String[] args) {
  11.  
    File tarFile= new File("E:\\TARZ\\paid_orderlist_20170920.tar");
  12.  
    List<String> zFileNames = unTarFile(tarFile);
  13.  
    for (String zFileName:zFileNames ){
  14.  
    File zFile = new File("E:\\TARZ\\"+zFileName);
  15.  
    unZFile(zFile,"E:\\TARZ\\");
  16.  
    }
  17.  
    }
  18.  
    /**
  19.  
    * 解压*.z文件 * @param file z包文件
  20.  
    * @param outPath z包下解压后文件存放路径
  21.  
    * @return 解压后文件
  22.  
    */
  23.  
    public static File unZFile(File file,String outPath) {
  24.  
    int buffersize = 2048;
  25.  
    FileOutputStream out = null;
  26.  
    ZCompressorInputStream zIn = null;
  27.  
    try {
  28.  
    FileInputStream fin = new FileInputStream(file);
  29.  
    BufferedInputStream in = new BufferedInputStream(fin);
  30.  
    // 若获取z文件名,最好使用lastIndexOf,不要使用indexOf,比如paid_orderlist_20170920.test.z
  31.  
    String name = file.getName() .substring(0, file.getName().lastIndexOf("."));
  32.  
    File outFile = new File(outPath+File.separator + name);
  33.  
    out = new FileOutputStream(outFile);
  34.  
    zIn = new ZCompressorInputStream(in);
  35.  
    final byte[] buffer = new byte[buffersize];
  36.  
    int n = 0;
  37.  
    while (-1 != (n = zIn.read(buffer))) {
  38.  
    out.write(buffer, 0, n);
  39.  
    }
  40.  
    return outFile;
  41.  
    }
  42.  
    catch (Exception e) {
  43.  
    e.printStackTrace();
  44.  
    return null;
  45.  
    }
  46.  
    finally {
  47.  
    try {
  48.  
    out.close();
  49.  
    zIn.close();
  50.  
    }
  51.  
    catch (IOException e) {
  52.  
    e.printStackTrace();
  53.  
    }
  54.  
    }
  55.  
    }
  56.  
    /**
  57.  
    * .TAR文件解压
  58.  
    * @param file
  59.  
    */
  60.  
    public static List<String> unTarFile(File file) {
  61.  
    int buffersize = 2048;
  62.  
    String basePath = file.getParent() + File.separator;
  63.  
    TarArchiveInputStream is = null;
  64.  
    // 存储tar包下所有z文件名
  65.  
    List<String> zFileNames = new ArrayList<String>();
  66.  
    try {
  67.  
    is = new TarArchiveInputStream(new FileInputStream(file));
  68.  
    while (true) {
  69.  
    TarArchiveEntry entry = is.getNextTarEntry();
  70.  
    if (entry == null) {
  71.  
    break;
  72.  
    }
  73.  
    zFileNames.add(entry.getName());
  74.  
    if (entry.isDirectory()) {
  75.  
    // 一般不会执行
  76.  
    new File(basePath + entry.getName()).mkdirs();
  77.  
    } else {
  78.  
    FileOutputStream os = null;
  79.  
    try {
  80.  
    File f = new File(basePath + entry.getName());
  81.  
    if (!f.getParentFile().exists()) {
  82.  
    f.getParentFile().mkdirs();
  83.  
    }
  84.  
    if (!f.exists()) {
  85.  
    f.createNewFile();
  86.  
    }
  87.  
    os = new FileOutputStream(f);
  88.  
    byte[] bs = new byte[buffersize];
  89.  
    int len = -1;
  90.  
    while ((len = is.read(bs)) != -1) {
  91.  
    os.write(bs, 0, len);
  92.  
    }
  93.  
    os.flush();
  94.  
    }
  95.  
    catch (Exception e) {
  96.  
    e.printStackTrace();
  97.  
    }
  98.  
    finally {
  99.  
    os.close();
  100.  
    }
  101.  
    }
  102.  
    }
  103.  
    }
  104.  
    catch (Exception e) {
  105.  
    e.printStackTrace();
  106.  
    }
  107.  
    finally {
  108.  
    try {
  109.  
    is.close();
  110.  
    // 解压后删除tar包
  111.  
    // file.delete();
  112.  
    }
  113.  
    catch (IOException e) {
  114.  
    e.printStackTrace();
  115.  
    }
  116.  
    }
  117.  
    // 返回tar包下所有文件名
  118.  
    return zFileNames;
  119.  
    }
  120.  
    }

 

 

分享到:
评论

相关推荐

    Java压缩及解压tar、tar.z格式文件

    Java压缩及解压tar、tar.z格式文件, 需要apache的包ant-1.7.1.jar 这个自己去搜索下下载

    解压tar.Z文件,含jar包

    1. **解压tar.Z文件**: 使用`uncompress`命令可以解压`.Z`文件。在终端中输入以下命令: ``` uncompress 文件名.tar.Z ``` 这将把`.Z`文件解压为`.tar`文件。 2. **解包tar文件**: 接下来,我们需要使用`...

    jdk1.8.0_202.tar.gz

    2. **解压**:使用`tar -zxvf jdk-8u202-linux-x64.tar.gz`命令在Linux环境下解压文件,得到`jdk1.8.0_202`目录。 3. **配置环境变量**:在系统路径文件(如`~/.bashrc`或`/etc/profile`)中设置`JAVA_HOME`、`PATH...

    jdk-11.0.5_linux-x64_bin.tar.gz

    4. **.tar.gz文件格式**: 这是Linux和Unix系统常用的文件打包和压缩格式。".tar"表示一个未经压缩的归档文件,可以将多个文件和目录打包在一起;".gz"表示使用gzip压缩算法进行了压缩,以减小文件大小,方便传输和...

    最新版linux jdk-11.0.10_linux-x64_bin.tar.gz

    Linux JDK 11.0.10 是Java开发工具包(Java Development Kit)的一个版本,专为Linux操作系统设计,适用于64位架构。这个版本的JDK是Oracle公司发布的,它包含了运行和开发Java应用程序所需的组件和服务。"jdk-...

    openjdk-11.0.1_linux-x64_bin.tar.gz

    在Linux环境下,首先需要解压`openjdk-11.0.1_linux-x64_bin.tar.gz`,然后通过系统环境变量配置,使系统识别到OpenJDK 11.0.1的安装路径,以便在命令行中使用`java`, `javac`等工具。 7. **开发与调试** 开发者...

    最新版linux jdk-11.0.8_linux-x64_bin.tar.gz

    2. **HTTP客户端API**:JDK 11内置了新的HTTP客户端API(`java.net.http`包),提供非阻塞I/O和异步操作,以支持现代Web服务交互。 3. **动态类型语言支持**:JEP 335增加了对动态类型语言(如Groovy和JRuby)的...

    openjdk-17.0.2(openjdk-17.0.2_macos-aarch64_bin.tar.gz)

    OpenJDK 17.0.2 是一个开源的 Java 开发工具包,它实现了 Java 虚拟机(JVM)和 Java 类库,是 Java 开发的重要基础。这个版本特别针对 macOS 系统的 aarch64 架构进行了优化,这意味着它可以无缝地在基于 Apple M1 ...

    openjdk-11+28_linux-x64_bin.tar.gz

    解压"openjdk-11+28_linux-x64_bin.tar.gz"后,会得到"openjdk-11+28_linux-x64_bin"目录,其中包含了OpenJDK的可执行文件和库,例如`bin`目录下的`java`, `javac`, `jar`等命令行工具,以及`lib`目录下的各种JDK库...

    最新版linux jdk-15.0.1_linux-x64_bin.tar.gz

    这个压缩包文件"jdk-15.0.1_linux-x64_bin.tar.gz"包含了运行和开发Java应用程序所需的所有核心组件。JDK是Java程序员的必备工具,它提供了编译器、JRE(Java Runtime Environment)、调试器和其他必要的工具,使得...

    jdk-11.0.11_linux-x64_bin.tar.gz

    安装JDK 11时,通常会解压`.tar.gz`文件,然后将解压后的目录添加到系统的PATH环境变量中,以便在任何地方使用`javac`编译器和`java`解释器。此外,开发人员还需要配置`JAVA_HOME`环境变量,指向JDK的安装位置,以便...

    OpenJDK11U-jdk_aarch64_linux_hotspot_11.0.10_9.tar.gz

    在解压OpenJDK11U-jdk_aarch64_linux_hotspot_11.0.10_9.tar.gz后,你会得到一个名为jdk-11.0.10+9的目录,其中包含了OpenJDK的所有组件,如JRE(Java Runtime Environment)和JDK工具,如javac编译器、javadoc文档...

    最新版 openjdk-15_linux-x64_bin.tar.gz

    命令行操作可能包括`tar -zxvf openjdk-15_linux-x64_bin.tar.gz`来解压,`sudo cp -r jdk-15/* /usr/lib/jvm/`来复制文件,以及`sudo update-alternatives --install /usr/bin/java java /usr/lib/jvm/jdk-15/bin/...

    openjdk-17.0.2(openjdk-17.0.2_linux-x64_bin.tar.gz)

    在`openjdk-17.0.2_linux-x64_bin.tar.gz`压缩包中,主要包含的文件是`jdk-17.0.2`,这通常是一个解压后包含整个JDK目录的文件。解压后,你会找到以下关键组件: 1. **bin**:包含了Java命令行工具,如`java`(执行...

    jdk-11.0.5_linux-x64_bin.tar.gz.zip

    在Linux环境下,可以使用`unzip`命令解压`.zip`文件,然后使用`tar`命令解压`.tar.gz`文件。解压后,可以将JDK的安装目录添加到`PATH`环境变量中,以便系统可以在任何地方找到Java命令。 配置完成后,可以使用`java...

    jdk-11.0.10_linux-x64_bin.tar.7z

    为了使用这个JDK,用户需要先用7-Zip或其他支持7z格式的工具解压".7z"文件,然后用tar命令解压".tar.gz"文件,最后根据Oracle JDK的安装指南将其添加到系统路径,以便于在命令行环境中使用javac(Java编译器)和java...

    IBM_JDK.tar.gz

    在处理`IBM_JDK.tar.gz`时,我们需要先用`tar`命令解压,然后用`gzip`或者`gunzip`命令来解压缩,以便获取IBM JDK的原始文件结构。 IBM JDK与Oracle JDK相比,有以下几个显著的区别和优势: 1. **性能优化**:IBM ...

    jre_linux_x64.tar.gz

    解压后,我们可以看到包含以下几个关键目录和文件: 1. **release**:这个文件通常包含了JRE的具体版本信息,例如Java版本号、构建号等,这对于识别和管理不同版本的JRE至关重要。 2. **legal**:该目录包含了关于...

    jdk-11.0.13_linux-x64_bin.tar.gz.7z

    标题中的"jdk-11.0.13_linux-x64_bin.tar.gz.7z"表明这是一个针对Linux 64位系统的Java Development Kit (JDK) 的版本11.0.13,它被压缩成了两个层次:首先是一个`.tar.gz`归档,然后这个归档又被7-Zip软件进行了`.7...

    mysql-connector-java-5.1.40.tar.gz

    MySQL Connector/J是MySQL数据库与Java应用程序之间的桥梁,它是一个实现了JDBC(Java Database Connectivity...在Linux环境下,我们需要通过`tar`命令解压文件,然后在Java代码中加载驱动并使用JDBC接口来操作数据库。

Global site tag (gtag.js) - Google Analytics