如何用Zip4j向内存中已有Zip文件添加文件(无文件系统权限)
如何用Zip4j向内存中的现有Zip文件添加文件(无文件系统访问)
我正尝试使用Zip4j向加载在内存中的现有Zip文件添加文件,且无法访问文件系统。我的Zip文件以byte[]形式存在,希望无需解压即可添加新文件。
我尝试了多种方法但均未得到理想结果,最接近的方式是将原Zip文件写入ByteArrayOutputStream,再用ZipOutputStream包装它,然后添加新文件,代码如下:
public byte[] addFileToArchive(byte[] originalContent, byte[] fileToAdd, String filePathInArchive) { ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); try (ZipOutputStream zipOutputStream = new ZipOutputStream(outputStream)) { // Add original content outputStream.write(originalContent); // Add new file ZipParameters parameters = new ZipParameters(); parameters.setFileNameInZip(filePathInArchive); zipOutputStream.putNextEntry(parameters); zipOutputStream.write(fileToAdd); zipOutputStream.closeEntry(); } return outputStream.toByteArray(); }
但这种方式生成的Zip文件存在问题:用Ark等Zip浏览器预览时能看到原文件,但解压后仅存在新添加的文件。
我在Zip4j官方仓库中找到了一个相关的陈旧issue。
编辑:我无法使用File或ZipFile的原因是,这段代码的数据来源可能是文件系统、S3 API或其他多种数据提供者。
请问有谁知道实现该需求的方法?谢谢!
内容的提问来源于stack exchange,提问作者MatthieuBlm
相关产品推荐
相关产品推荐

