gpt4 book ai didi

java - 如何使用 Java 将 .tar 文件放入 .tar.gz 文件中?

转载 作者:行者123 更新时间:2023-12-02 03:06:18 26 4
gpt4 key购买 nike

我希望创建一个 .tar.gz,其中包含 .tar 文件的子目录。

我现在有两个单独的东西在工作,我可以创建一个 data.tar 文件,其中包含所需的信息。我也有一个 .tar.gz 工作,但子目录不是 .tar 文件,例如:data.tar(工作中)
|-目录/
|--文件

file.tar.gz(工作中)
|-数据/
|--目录/
|---文件

目标:file.tar.gz(不工作)
|-data.tar
|--目录/
|---文件

要将 .tar 添加到我的 .tar.gz,我正在执行以下操作,创建一个 .tar 文件,然后将该 .tar 文件添加到我的 .tar.gz

public class TarArchiveOutput extends Closeable {

public BufferedOutputStream bOut;
public GzipCompressorOutputStream gzOut;
public TarArchiveOutputStream tOut;
private boolean isZipped;

public TarArchiveOutput(OutputStream oStream, boolean zip) throws IOException {
bOut = null;
gzOut = null;
tOut = null;
isZipped = zip;
if(isZipped) {
bOut = new BufferedOutputStream(oStream, 1024 * 10240);
gzOut = new GzipCompressorOutputStream(bOut);
tOut = new TarArchiveOutputStream(gzOut);
tOut.setLongFileMode(TarArchiveOutputStream.LONGFILE_POSIX);
} else {
bOut = new BufferedOutputStream(oStream, 1024 * 10240);
tOut = new TarArchiveOutputStream(bOut);
tOut.setLongFileMode(TarArchiveOutputStream.LONGFILE_POSIX);
}
}

public void addFileToOutput(String path, String base) throws IOException {
File f = new File(path);
if(!base.endsWith("/"))
base = base+"/";
String entryName = base + f.getName();
TarArchiveEntry tarEntry = new TarArchiveEntry(f, entryName);
tOut.putArchiveEntry(tarEntry);

if (f.isFile()) {
IOUtils.copy(new FileInputStream(f), tOut);
tOut.closeArchiveEntry();
} else {
tOut.closeArchiveEntry();
File[] children = f.listFiles();
if (children != null) {
for (File child : children) {
addFileToOutput(child.getAbsolutePath(), entryName + "/");
}
}
}
}

@Override
public void close() {
if(isZipped) gzOut.close();
tOut.close();
bOut.close();
}
}

仅创建 .tar 文件:

TarArchiveOutput dataTarOutput = new TarArchiveOutput(new FileOutputStream(new File("data.tar")), false);
//Add files

创建.tar.gz

TarArchiveOutput tarGZOutput = new TarArchiveOutput(new FileOutputStream(new File("file.tar.gz")), true);
tarGZOutput.addFileToOutput("data.tar", "");

我希望格式如下:文件.tar.gz
|-data.tar
|--目录/
|---文件

实际结果是一个.tar.gz,当解压缩/解压缩时,它包含一个data.tar文件,但是当我尝试解压缩时,它会变成一个data.tar.cpgz(无限循环),无法解压缩。预先感谢任何帮助都会很棒!

最佳答案

为了对 TAR 存档进行 GZip,您需要执行以下操作:

TarArchiveOutput dataTarGzOutput = new TarArchiveOutput(new GZIPOutputStream(new FileOutputStream(new File("data.tar.gz"))), false);

关于java - 如何使用 Java 将 .tar 文件放入 .tar.gz 文件中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57021283/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com