Java TarInputStream 读取 tar.gz 文件的文件名,其中包含另一个 tar.gz 文件

Java TarInputStream read file names of a tar.gz file which included another tar.gz file

我正在尝试获取另一个 tar.gz 文件中的 tar.gz 文件的文件名。这是示例代码;

try (TarInputStream tis = getStreamRemoteTarGz(url)) { // accessing the first tar.gz file
    TarEntry e;
    while ((e = tis.getNextEntry()) != null) {
        if (e.getName().endsWith(".tar.gz")) {
             // accessing the inner tar.gz file (java.io.FileNotFoundException: inner_tar_file.tar.gz (No such file or directory))
             try (TarInputStream innerTis = new TarInputStream(new GZIPInputStream(new FileInputStream(entry.getName())))) {
                ....
        }
    }

结果,我得到了 FileNotFoundException: inner_tar_file.tar.gz。文件名 (inner_tar_file.tar.gz) 是正确的,我可以访问内部 tar.gz 文件的名称,但我想访问包含在这个 tar.gz 文件中的文件名.如何使用 TarInputStream 访问内部 tar.gz 文件的文件名?

tar 文件的内容本身不是文件。至少不是 java.io.File 意义上的,它直接代表文件系统上的 真实物理文件

java.io.File 代表任何可以用像 C:\somePath\myFile.ext(在 Windows 上)或 /home/user/somepath/myFile.ext(在大多数其他 OS 上)这样的路径寻址的任何东西。没有直接指向 操作系统可以理解的 .tar.gz 中的条目的路径。

无需创建新的 FileInputStream,只需传入名为 tisTarInputStream