java - 将文件添加到现有的 Zip 存档中

标签 java apache-commons

所以我遵循了这里的代码块:http://commons.apache.org/proper/commons-compress/examples.html ,据说只需制作一个 ZipArchiveEntry 然后插入数据。正如您在下面的代码中看到的那样。

    public void insertFile(File apkFile, File insert, String method)
    throws AndrolibException {
        ZipArchiveOutputStream out = null;
        ZipArchiveEntry entry;

        try {
            byte[] data = Files.toByteArray(insert);
            out = new ZipArchiveOutputStream(new FileOutputStream(apkFile, true));
            out.setMethod(Integer.parseInt(method));
            CRC32 crc = new CRC32();
            crc.update(data);
            entry = new ZipArchiveEntry(insert.getName());
            entry.setSize(data.length);
            entry.setTime(insert.lastModified());
            entry.setCrc(crc.getValue());
            out.putArchiveEntry(entry);
            out.write(data);
            out.closeArchiveEntry();
            out.close();
        } catch (FileNotFoundException ex) {
            throw new AndrolibException(ex);
        } catch (IOException ex) {
            throw new AndrolibException(ex);
        }
}

基本上,它传递了将采用“插入”文件的文件 (apkFile),另一个参数指示该文件的压缩方法。运行此代码块会产生 0 个错误,但 ZIP 文件中只有那个"new"文件。它删除所有以前的文件,然后插入新文件。

在 commons-compresss 之前,我必须将整个 Zip 复制到一个临时文件,进行更改,然后再将最终的 Zip 文件复制回来。不过我认为这个库可以解决这个问题?

最佳答案

总是希望在完成流后close()流(即out.close()),最好是在最终阻止。

关于java - 将文件添加到现有的 Zip 存档中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16340880/

相关文章:

java - 除了基于 token 的身份验证之外,还允许 Rest api 端点使用 http 基本身份验证

java - 无法在 Python 中发布文件 [在 Java 中工作]

java - 如何使用 ReflectionToStringBuilder 并将日期格式化为可读字符串?

java - 当目录有太多文件时从 FTP 检索文件

java - 如何获取原始文件夹android中的字符串文件名(我的音频文件)

java - 解析xml时如何修复换行错误

maven - Maven依赖项org.apache.commons:commons-io和commons-io:commons-io有什么区别?

java - 将域添加到 apache.commons 中的 UrlValidator

java - 尝试编写返回某些数字的数学测试时出现问题

java - 替换路径 url 占位符格式