作者热门文章
- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我想预览 .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 压缩:
test.7z
--- file1.txt
--- otherInner.7z
---- innerFile1.txt
---- innerFile2.txt
有没有办法在不提取 7z 的情况下做到这一点?感谢您的帮助。
最佳答案
有点。你的意思是不提取外部 7z?是的。不提取内部 7z?没有。
看起来 Apache Commons SevenZ 仅适用于 File 对象,因此您必须至少提取内部 7z 文件然后对其进行解码。
一旦您有了所需的条目
,您就可以从该条目的字节数组中读取字节。然后您可以将这些字节写入一个(临时)文件,然后创建一个新的 SevenZFile
对象来解析它..
此代码主要取自 Apache Common Compress Examples page :
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);
}
现在我们已将压缩字节存储在 byte[]
中,我们必须将其写出到一个文件中,然后我们可以使用另一个 SeventZFile 实例将其解压缩。
您可能可以跳过中间字节[],而是直接读取和写入临时文件,但无论哪种方式,您都必须在某处创建一个临时文件。
关于java - 无需解压即可预览 .7z 内容和子文件夹,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33239183/
这实际上是我问的问题的一部分here ,该问题没有得到答复,最终被标记为重复。 问题:我只需使用 @Autowired 注释即可使用 JavaMailSender。我没有通过任何配置类公开它。 @Co
我是一名优秀的程序员,十分优秀!