Java 预览.7z内容和子文件夹而不提取

Java 预览.7z内容和子文件夹而不提取,java,7zip,apache-commons-compress,Java,7zip,Apache Commons Compress,我希望预览.7z的内容,而不使用Java进行解压缩,因此我尝试使用Apache Commons Compress: public static void main(String[] args) { try { SevenZFile sevenZFile = new SevenZFile(new File("C://test.7z")); SevenZArchiveEntry entry; while ((entry = sevenZFile

我希望预览.7z的内容,而不使用Java进行解压缩,因此我尝试使用Apache Commons Compress:

public static void main(String[] args) {
    try {
        SevenZFile sevenZFile = new SevenZFile(new File("C://test.7z"));
        SevenZArchiveEntry entry;
        while ((entry = sevenZFile.getNextEntry()) != null) {
            System.out.println("Name: " + entry.getName());
            System.out.println("Size : " + entry.getSize());
            System.out.println("--------------------------------");
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
}
它可以工作,但我也想将文件预览到其他7z或原始7z的zip:

test.7z
--- file1.txt
--- otherInner.7z
    ---- innerFile1.txt
    ---- innerFile2.txt
有没有办法在不提取7z的情况下这样做?
谢谢你的帮助。

有点。你的意思是不提取外7z?对不提取内部7z?没有

看起来ApacheCommons SevenZ只对文件对象有效,因此您必须至少提取内部7z文件,然后对其进行解码

一旦有了所需的
条目
,就可以从该条目的字节数组中读取字节。然后,您可以将这些字节写入(temp)文件,然后创建一个新的
SevenZFile
对象来解析该文件

此代码主要取自:

现在我们已经将压缩的字节存储在
byte[]
中,我们必须将其写入一个文件,然后我们可以使用另一个SeventZFile实例对其进行解压缩


您可能可以跳过中间字节[],而是直接读写临时文件,但无论如何,您都必须在某个地方创建临时文件。

我不确定,但我认为这不可能,因为sub 7zip文件是压缩的,所以7zip需要解压以分析里面的内容。这也是我的观点,但我不确定。。。谢谢你的回答是的dkatzel,它没有提取外部和内部7z。。。谢谢你详细的回答
SevenZFile sevenZFile =...
SevenZArchiveEntry entry...

...found our entry we want...
byte[] content = new byte[entry.getSize()];
LOOP UNTIL entry.getSize() HAS BEEN READ {
    sevenZFile.read(content, offset, content.length - offset);
}