列出tar归档内容(java commons compress)返回可变数量的条目,然后流闭合异常。如何解决?

时间:2017-12-12 17:53:12

标签: java tar apache-commons-compress

我已经在google和stackoverflow上研究了这个问题很长一段时间了。  不幸的是,我似乎找不到任何似乎可以解决这个问题的资源。不可否认,我的搜索不是最好的;任何有关资源的帮助,示例或指示都将非常感激。

以下代码是我列出 TarArchiveInputStream 中的存档内容的方法:

public static List<String> tarListDir(InputStream incoming) 
    throws Exception {
    TarArchiveInputStream tarInput = new TarArchiveInputStream(incoming);
    TarArchiveEntry entry = null;
    List<String> ouah = new ArrayList<String>();

    try {
        while ((entry = tarInput.getNextTarEntry()) != null) {
            if (!entry.isFile()) {
                continue;
            }

            ouah.add(entry.getName());

            if (RecScan.verbose || RecScan.debugging) {
                if (entry.isFile()) {
                    System.out.print("file: \t");
                } else if (entry.isDirectory()) {
                    System.out.print("dir: \t");
                } else {
                    System.out.print("wut: \t");
                }

                System.out.println(ouah.get(ouah.size() - 1));
            }

        }
    } catch (Exception e) {
        tarInput.close();
        throw new Exception("Closed w/exception: " + e.getMessage());
    }

    if (RecScan.verbose || RecScan.debugging) {
        System.out.println("Closing tarInput normally");
    }
    tarInput.close();

    return ouah;
}

如上所述,我希望获得存档中条目的 List 。不幸的是,该方法似乎只获得随机数量的目录条目。这个数字因每个存档(用4个不同的测试)而变化,从0个条目到12个条目。抛出的异常是 IOException Stream Closed 是特定的。

我不太熟悉Apache Commons Compress库(很明显),而且我真的不知道任何十六进制编辑器是否足以在存档中挖掘,看看是否存在非POSIX的东西,它是磕磕绊绊的。我认为entry.isFile()条件会避免这种并发症。

正如我所提到的,任何帮助或资源都非常感谢! TIA!

编辑:虽然那里的代码(在第一条评论的帖子参考中)似乎基本上与我使用的相同,我确实切出了我的代码并使用那里的代码,几乎是逐字的。仍然得到完全相同的错误:Stream Closed。我确实找到了一些可能含有线索的东西;我尝试换掉我递交的原始BufferedInputStream的{​​{1}}包裹。这会立即导致 Stream Closed 错误,而在归档列表之后会导致InputStream关闭。绝对还在寻找提示。

0 个答案:

没有答案