You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 08:02:38