首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

java tar和gzip目录,但最终结果不是.tar.gz格式,结果只是一个常规文件

在使用Java进行tar和gzip压缩时,如果最终结果不是一个.tar.gz格式的文件,而是一个常规文件,可能是由于以下几个原因造成的:

  1. 压缩方法不正确:可能是在压缩过程中没有正确地将tar文件和gzip压缩结合起来。
  2. 文件流处理不当:在读写文件流时可能出现了问题,导致最终的文件不是预期的格式。
  3. 编码或字符集问题:在处理文件名或路径时,可能因为编码不一致导致文件名或路径出现问题。

解决方法

下面是一个使用Java进行tar和gzip压缩的正确示例代码:

代码语言:txt
复制
import java.io.*;
import org.apache.commons.compress.archivers.tar.*;
import org.apache.commons.compress.compressors.gzip.*;

public class TarGzipCompressor {
    public static void main(String[] args) {
        String sourceDir = "path/to/source/directory";
        String outputFileName = "output.tar.gz";

        try {
            File source = new File(sourceDir);
            FileOutputStream fos = new FileOutputStream(outputFileName);
            BufferedOutputStream bos = new BufferedOutputStream(fos);
            GzipCompressorOutputStream gzos = new GzipCompressorOutputStream(bos);
            TarArchiveOutputStream tarOS = new TarArchiveOutputStream(gzos);

            addFilesToTarGZ(source, "", tarOS);

            tarOS.finish();
            tarOS.close();
            gzos.close();
            bos.close();
            fos.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    private static void addFilesToTarGZ(File file, String parentPath, TarArchiveOutputStream tarOS) throws IOException {
        String entryName = parentPath + file.getName();
        TarArchiveEntry tarEntry = new TarArchiveEntry(file, entryName);
        tarOS.putArchiveEntry(tarEntry);

        if (file.isFile()) {
            try (FileInputStream fis = new FileInputStream(file)) {
                byte[] buffer = new byte[1024];
                int len;
                while ((len = fis.read(buffer)) != -1) {
                    tarOS.write(buffer, 0, len);
                }
            }
            tarOS.closeArchiveEntry();
        } else if (file.isDirectory()) {
            tarOS.closeArchiveEntry();
            File[] children = file.listFiles();
            if (children != null) {
                for (File child : children) {
                    addFilesToTarGZ(child, entryName + "/", tarOS);
                }
            }
        }
    }
}

解释

  1. 依赖:确保你的项目中包含了Apache Commons Compress库,可以通过Maven添加以下依赖:
  2. 依赖:确保你的项目中包含了Apache Commons Compress库,可以通过Maven添加以下依赖:
  3. 代码逻辑
    • 创建一个FileOutputStream来写入最终的.tar.gz文件。
    • 使用GzipCompressorOutputStream将输出流包装成gzip压缩流。
    • 使用TarArchiveOutputStream将gzip压缩流包装成tar归档流。
    • 递归地将文件和目录添加到tar归档中。
  • 注意事项
    • 确保所有文件和目录的路径正确。
    • 处理文件流时要注意关闭流,以避免资源泄漏。

参考链接

通过上述方法和代码示例,你应该能够正确地生成.tar.gz格式的文件。如果仍然遇到问题,请检查日志和异常信息,以便进一步诊断问题所在。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

【Linux】Linux常用操作命令(四)

/export/aaa/5.txt ​ # 查看结果 tree /export 3.2 第二步: 使用gzip格式 压缩 解压缩 打包 压缩 是两件事 类似与 先将冬天衣服放到压缩袋...命令格式如下 # 压缩文件 tar -zcvf 打包压缩文件名.tar.gz 被压缩的文件/目录 ​ # 解压缩文件(记忆敲门: 至孝潍坊) tar -zxvf 打包文件.tar.gz ​ # 解压缩到指定路径...tar -zxvf 打包文件.tar.gz -C 目录路径 tar 的选项说明 命令 英文 含义 z gzip 使用gzip压缩和解压缩 j bzip2 使用bzip2压缩和解压缩 练习1: 将1....txt、2.txt、3.txt 打包压缩成 123.tar.gz文件(gzip压缩格式) ​ 练习2: 将有内容的aaa目录 打包成 aaa.tar.gz 文件(gzip压缩格式) ​ 练习3: 将 123....tar.gz 解压到 当前目录中(gzip压缩格式) ​ 练习4: 将 aaa.tar.gz 解包到 /export/bbb 目录中(gzip压缩格式) 小结 打包压缩: tar -zcvf 打包之后的文件

1K40
  • Linux下常用压缩 解压命令压缩比率对比

    常用的格式有: tar, tar.gz(tgz), tar.bz2, 不同方式,压缩和解压方式所耗CPU时间压缩比率也差异也比较大。...1. tar 只是打包动作,相当于归档处理,不做压缩;解压也一样,只是把归档文件释放出来。...-xvf file.tar tar -xvf file.tar -C /temp #解压到temp目录下 2. tar.gz tgz (tar.gztgz只是两种不同的书写方式,后者是一种简化书写,...等同处理) 这种格式是Linux下使用非常普遍的一种压缩方式, 兼顾了压缩时间(耗费CPU)压缩空间(压缩比率) 其实这是对tar包进行gzip算法的压缩 (1)打包压缩格式tar -zcvf examples.tgz...,所以广泛使用在 Windows、Linux、MacOS 平台,要说 zip 有什么缺点的话,就是它的压缩率并不是很高,不如 rar及 tar.gz格式

    8.7K70

    快速学习Linux-压缩与解压缩命令

    .gz格式,原文件保留 #-c的意思不是说需要保留文件,而是要把压缩的结果输出到控制台....gzip -r 目录 #压缩目录下的所有子文件,但是不能压缩目录 压缩 gzip -d 压缩文件 #解压缩文件 gunzip 压缩文件 #解压缩文件 .bz2格式 解压 bzip2 源文件 #压缩为....: -x 解打包 .tar.gz格式 其实.tar.gz格式是先打包为tar格式,在压缩为.gz格式 解压 tar -zcvf 压缩包名.tar.gz文件 选项: -z 压缩为.tar.gz...格式 压缩 tar -zxvf 压缩包名.tar.gz 选项: -x 解压缩.tar.gz格式 #加上-C表示解压到指定的目录 tar -zxvf 压缩包名.tar.gz -C 指定目录 .tar....bz2命令 其实.tar.bz2格式是先打包为tar格式,在压缩为.bz2格式 解压 tar -jcvf 压缩包名.tar.bz2 源文件 选项: -c 压缩为.tar.bz2格式 压缩 tar

    1.3K20

    Linux下的tar压缩解压缩命令使用

    webs //将webs目录里所有文件打包到webs.tar tar -xvf file.tar //解压 tar包 //.tar.gz压缩解压: tar -czf webs.tar.gz webs...//将webs目录里所有文件打包成webs.tar后,并且将其用gzip压缩,生成一个gzip压缩过的包,命名为webs.tar.gz tar -xzvf file.tar.gz //解压 tar.gz.../test test.zip 注意:压缩目录时,比如webs目录,命令不能为zip webs.zip webs/否则解压后只是一个文件夹。...-u:更新原压缩包中的文件 这五个是独立的命令,压缩解压都要用到其中一个,可以别的命令连用只能用其中一个。.../test 结果:解压失败,提示 tar: short read,失败原因是-a属性解析后缀lzma,发现并不是.lzma格式的包 修改解压:tar xf xxx.tar.lzma -C .

    3.4K20

    Linux常用打包压缩命令

    文件打包压缩 Linux 上的压缩包文件格式,除了 Windows 最常见的*.zip、*.rar、.7z 后缀的压缩文件,还有 .gz、.xz、.bz2、.tar、.tar.gz、.tar.xz、...程序 (GNU zip) 压缩的文件 *.xz xz 程序压缩的文件 *.bz2 tar 打包,gzip 程序压缩的文件 *.tar.gz tar打包,gzip程序压缩的文件 *.tar.xz tar...7z,gzip,xz,bzip2 等工具的支持,这些压缩工具本身只能实现对文件目录(单独压缩目录中的文件)的压缩,没有实现对文件的打包压缩,所以我们也无需再单独去学习其他几个工具,tar 的解压压缩都是同一个命令...tar -tf test.tar 保留文件属性跟随链接(符号链接或软链接),有时候我们使用tar备份文件当你在其他主机还原时希望保留文件的属性(-p参数)备份链接指向的源文件不是链接本身(-...tar -czf etc.tar.gz ~ 解压 *.tar.gz 文件 tar -xzf etc.tar.gz 现在我们要使用其他的压缩工具创建或解压相应文件只需要更改一个参数即可: 压缩文件格式

    18.3K20

    linux解压 tar命令

    ——————————————— .gz 解压1:gunzip FileName.gz 解压2:gzip -d FileName.gz 压缩:gzip FileName .tar.gz .tgz...命令: uncompress 格式: uncompress 选项 文件列表 功能: 解压缩用compress 程序压缩过的文件 选项: -c 它将压缩数据发往标准输出而不是改写旧的压缩文件件。...实例: 目的:压缩/mnt/lgx/a1.doc命令:#gzip -v /mnt/lgx/a1.doc结果:产生a1.doc.gz的压缩文件 命令: gunzip 格式: gunzip 选项 文件列表...结果:产生一个以.tar为扩展名的打包文件 实例2: 目的:用tar解开打包文件命令:#tar -xvf /mnt/lgx/a1.doc.tar附加说明:在通常情况下,tar打包与gzip(压缩)经常联合使用...压缩更加有效),产生一个以.tar.Z的文件,在解包时,可先用“uncompress 文件名”格式解压,然后用“tar -xvf 文件名”解包。

    11.8K40

    Linux-unpack

    #### 1) tar调用 gzip是GNU组织开发的一个压缩程序,.gz结尾的文件就是gzip压缩的结果。与gzip 相对的解压程序是gunzip。tar中使用-z这个参数来调用gzip。...#### 3)tar调用compress compress也是一个压缩程序,但是好象使用compress的人不如gzipbzip2的人多。.Z结尾的文件就是bzip2压缩的结果。...以下补充 tar -c: 建立压缩档案 -x:解压 -t:查看内容 -r:向压缩归档文件末尾追加文件 -u:更新原压缩包中的文件 这五个是独立的命令,压缩解压都要用到其中一个,可以别的命令连用只能用其中一个...、*.zip 用 unzip 解压 Linux下*.tar.gz文件解压缩命令 1.压缩命令: 命令格式tar -zcvf 压缩文件名.tar.gz 被压缩文件名 可先切换到当前目录下。...压缩文件被压缩文件名都可加入路径。 2.解压缩命令: 命令格式tar -zxvf 压缩文件名.tar.gz 解压缩后的文件只能放在当前的目录

    1.1K10

    前端工程师Linux命令常见合集

    ln -s \home\bin\java \usr\bin\java建立一个软连接,这样就可以读到这个命令了。...-xvf book.tar 解开book.tartar.gz压缩格式 zip可以压缩目录压缩率不高,gzip压缩效率高但是不支持压缩目录 所以日常我们先将文件目录打包为tar格式,在进行gzip...变成[xxx].tar.gzip格式,就比如nodejs官网的下载就是tar.gzip格式。...命令 demo 含义 tar -zcvf [压缩包名].tar.gz文件 tar -zcvf book.tar.gz book 可以先将book目录打包成book.tar然后对于book.tar压缩成为...联合命令 利用|管道符,|管道符表示将上一个结果输出个下一个,比如 head -6 1.txt | tail -3 表示查看1.txt的前6行,然后通过|将前六行的结果输出给tail -3也就是查看前六行的后三行

    41020

    第十二章·Linux文件管理-压缩打包

    ---- 压缩打包介绍 windows下我们接触最多的压缩文件就是.rar格式, Linux有自己所特有的压缩工具。...tar压缩工具 tar是linux下最常用的压缩与解压缩, 支持文件目录的压缩归档 #语法:tar [-zjxcvfP] filename c //创建新的归档文件 x //对归档文件解包...t //列出归档文件里的文件列表 v //输出命令的归档或解包的过程 f //指定包文件名,多参数f写最后 C //指定解压目录位置 z //使用gzip压缩归档后的文件(.tar.gz...格式 cjf //打包tar.bz格式 cJf //打包tar.xz格式 zxf //解压tar.gz格式 jxf //解压tar.bz格式 xf //自动选择解压模式...member names ---- 压缩命令练习 1.如何使用gzip命令对文件进行压缩、解压 2.如何用zip命令对文件以及目录进行压缩、解压 3.创建一个自己名字的文件至/opt目录 4.

    62610

    Linux大人养成计划1---基础命令总结

    : .zip .gz .bz2 .tar.gz .tar.bz2 (1).zip格式压缩与解压缩 zip 压缩文件名 源文件 ---压缩文件 zip–r 压缩文件名 源目录 ---压缩目录...: 显示过程 -f : 指定打包后的文件tar–xvf 打包文件名 ---解打包 选项参数 -x : 解打包 (5).tar.gz压缩格式与解压 注:其实tar.gz格式是先打包成....tar格式,再压缩为.gz格式tar–zcvf 压缩包名 源文件 选项参数: -z : 压缩为.tar.gz格式 tar–zxvf 压缩包名 ---解压.tar.gz格式文件 选项参数:...-x : 解压缩.tar.gz格式 8.开关机命令 (1).shutdown命令 shutdown[选项] 时间 选项: -c : 取消前一个关机命令 -h : 关机 -r :...字符串”重复执行最后一条以该字符串开头的命令 4.重定向 例如当我们执行 cat test.txt 命令时,该命令会把test.txt里面的内容输出到屏幕上,如果我们希望它把结果输出到某个文件上,而不是屏幕

    61230

    Linux常用命令-解压缩篇

    打包后删除源文件 有时候再打包后可能需要删除源文件一个个删除显得麻烦,我们可以使用--remove-files 选项: tar -zcvf test.tar.gz test.log --remove-files...test #将1.log解压到test目录 解压时去掉目录结构 压缩包中的文件可能存在多级目录常规方式解压出来后,对应目录也会存在。.../temp 解压jar包 jar包是java归档包,同样可用unzip解压查看里面的文件: unzip -o java.jar -d dir gzip 涉及参数说明: -k 保留源文件 -d...解开压缩文件 -r 递归处理,将指定目录下的所有文件及子目录一并处理 -v 显示指令执行过程 tar命令带有-z参数,并且打包成tar.gz文件时,便调用gzip进行了压缩。...使用-k参数保留源文件gzip -k ./* #当前目录下所有文件进行压缩,每个文件一个gz包 gzip -rkv ./* 递归压缩 解压也很简单: gzip -dv test.gz bzip2

    3.4K20

    Linuxcentos下zip、tar、gz压缩解压命令

    zip包执行不了zip命令,基本上都可以用tar命令的,实例如下: tar -zcvf /home/zdzlibs.tar.gz /home/zdz/java/zdzlibs/ linux zip命令...tar 命令详解   -c: 建立压缩档案   -x:解压   -t:查看内容   -r:向压缩归档文件末尾追加文件   -u:更新原压缩包中的文件   这五个是独立的命令,压缩解压都要用到其中一个,可以别的命令连用只能用其中一个...1) tar调用gzip   gzip是GNU组织开发的一个压缩程序,.gz结尾的文件就是gzip压缩的结果。与gzip相对的解压程序是gunzip。tar中使用-z这个参数来调用gzip。...2) tar调用bzip2   bzip2是一个压缩能力更强的压缩程序,.bz2结尾的文件就是bzip2压缩的结果。与bzip2相对的解压程序是bunzip2。tar中使用-j这个参数来调用gzip。...3)tar调用compress   compress也是一个压缩程序,但是好象使用compress的人不如gzipbzip2的人多。.Z结尾的文件就是bzip2压缩的结果

    18.5K20

    Linux——常用命令(压缩和解压缩)

    在Linux中可以识别的常见压缩格式有几十种,比如.zip、.gz、.bz2、.tar、.tar.gz、.tar.bz2等,Linux不支持.rar.tz格式的压缩文件。  ...,如果想保留原文件则可以使用-c选项将压缩过程产生的标准输出写入一个新的文件中,示例如下:>的作用是覆盖内容,>>的作用是追加内容   压缩目录下的每个文件:下述命令会将123这个目录下的每个文件分别进行压缩...,而不是将整个123目录进行压缩,也就是说**gzip命令不会打包压缩** gzip -r 123   解压缩也可以使用gunzip:  3、.bz2格式:.bz2格式是Linux中的另一种常用压缩格式...因此最好先将原文件删除  4、.tar格式只是打包并不会压缩文件,.tar格式的打包和解打包都是使用tar命令,区别只是选项不同   打包示例:   打包多个文件:... 5、.tar.gz格式.tar.bz2格式:使用tar命令后跟选项的方式实现tar命令gzip或者bzip2命令的组合,实现同时进行打包压缩,这也是最经常使用的压缩和解压缩方式

    93020

    大数据之脚踏实地学05--Linux中的解压与帮助命令

    压缩与解压缩命令 ---- 尽管Linux系统中涉及到十几种压缩与解压缩的命令,根据自己的经验,比较常用的压缩格式就五六种,例如*.gz、*.zip、*.tar.gz等。...如上图所示,在Screen目录内包含两个子目录两个png文件,利用gzip命令可以对目录内的文件目录文件进行递归的压缩(必须使用-r选项),全都压缩为.gz的格式。...【示例】:递归解压缩目录内的文件 ? 如上图所示,通过gzip命令-d选项就可以重新将压缩文件进行解压缩。...---- *.tar.gz的压缩与解压缩 命令名称:tar 英文含义:tar 功能描述:将文件目录打包成文件并进一步压缩,也可以通过该命令作解压操作。tar属于最常用的压缩解压缩命令。...(调用bzip2压缩方式),后缀为tar.bz2 -x(extract):将.tar或.tar.gz进行解压 压缩格式:.tar.gz 【总结】 ?

    61830

    Linux 命令:每日一学,一文说尽打包压缩工具实践

    ,所以常用压缩格式.tar.gz.tar.bz2格式作为先打包后压缩的产物。...*.gz,目录依然存在只是目录里面的文件相应变成了*.gz,这就是压缩打包不同。....rar格式 unrar 命令 - 将.rar格式文件解压 描述:除了zip压缩以外在Windows系统中,rar也是一个常用的压缩文件格式,用于将一个或多个文件目录打包成一个压缩文件,具有较好的压缩比错误恢复功能.../v5/ weiyigeek.top-解压文件到当前或者指定目录图 示例4.解压到当前文件夹,只是文件不包括目录,即将所有目录下的源文件移动的一级目录下。...tar .tar 或 .tar.gz 或 .tar.bz2 或 .tar.tgz Linux 中常用打包工具用于将多个文件目录合并成一个归档文件,可以与压缩工具结合使用,适合备份归档文件集合,可以很容易地添加或提取单个文件

    17510
    领券