我读过许多将 zip 文件提取到磁盘上的主题。但我有一个用例,需要将 zip 提取到内存中。ZIP 文件包含嵌套 zip 文件的列表。我在浏览了 Stack Overflow 上的几篇帖子后提出了这个问题。您能否分享任何包含有关如何在内存中解压缩文件的信息的帖子/链接?
如果您想读取嵌套的 .zip 文件,您可以尝试使用ZipInputStream(就像已经提到的那样)并检查ZipEntry(s) 是否也是 *.zip 文件,在这种情况下,它可以作为下一个 .zip 文件递归读取。就像是:
private static void readZipInputStream(\n InputStream inputStream, BiConsumer<ZipEntry, ByteArrayOutputStream> consumerFunction) throws IOException {\n\n try (ZipInputStream zipInput = new ZipInputStream(inputStream)) {\n ZipEntry entry;\n while ((entry = zipInput.getNextEntry()) != null) {\n ByteArrayOutputStream outStream = new ByteArrayOutputStream();\n byte[] buffer = new byte[1024];\n int length;\n while ((length = zipInput.read(buffer)) != -1) {\n outStream.write(buffer, 0, length);\n }\n\n if (entry.getName().endsWith(".zip")) {\n // need to go deeper...\n ByteArrayInputStream inStream = new ByteArrayInputStream(outStream.toByteArray());\n readZipInputStream(inStream, consumerFunction);\n } else {\n // do something...\n consumerFunction.accept(entry, outStream);\n }\n }\n }\n}\nRun Code Online (Sandbox Code Playgroud)\n例如,有一个结构如下的 zip 文件:
\nfile.zip\n\xe2\x94\x9c\xe2\x94\x801+2.zip\n\xe2\x94\x82 \xe2\x94\x9c\xe2\x94\x801.zip\n\xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x94\xe2\x94\x801.txt\n\xe2\x94\x82 \xe2\x94\x94\xe2\x94\x802.zip\n\xe2\x94\x82 \xe2\x94\x94\xe2\x94\x802.txt\n\xe2\x94\x94\xe2\x94\x803.zip\n \xe2\x94\x94\xe2\x94\x803.txt\nRun Code Online (Sandbox Code Playgroud)\n并使用readZipInputStream这样的函数:
public class Application {\n\n public static void main(String[] args) throws IOException {\n String path = "file.zip";\n try (FileInputStream inputStream = new FileInputStream(Paths.get(path).toFile())) {\n readZipInputStream(\n inputStream,\n (entry, outputStream) -> {\n System.out.println(entry.getName());\n System.out.println("--------------------------------");\n System.out.println(outputStream.toString());\n System.out.println("--------------------------------");\n }\n );\n }\n }\n}\nRun Code Online (Sandbox Code Playgroud)\n将打印三个 .txt 文件的内容:
\n1.txt\n--------------------------------\nLorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod\ntempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam,\nquis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo\nconsequat.\n--------------------------------\n2.txt\n--------------------------------\n- Integer vel sem consectetur, ullamcorper leo quis, consequat mauris.\n- Nulla efficitur sapien at velit fermentum condimentum.\n- Vestibulum elementum nulla ut ipsum tempus, ut molestie sem sollicitudin.\n--------------------------------\n3.txt\n--------------------------------\nMorbi tincidunt ornare mi. Sed id risus tortor. Interdum et malesuada \nfames ac ante ipsum primis in faucibus. Pellentesque tincidunt, \nnulla a interdum porta, orci elit ultricies leo, in maximus orci \ntortor pulvinar est. Curabitur eget fermentum risus. Vestibulum euismod \nconvallis eros, nec blandit neque blandit at.\n--------------------------------\nRun Code Online (Sandbox Code Playgroud)\n
| 归档时间: |
|
| 查看次数: |
3725 次 |
| 最近记录: |