2

所以我按照这里的代码块: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 文件中只有那个“新”文件。它删除所有以前的文件,然后插入新文件。

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

4

2 回答 2

0

作为替代方案:我编写了一些实用方法来使用 NIO.2 File API(库是开源的)将文件和目录复制到 Zip 文件:

马文:

<dependency>  
    <groupId>org.softsmithy.lib</groupId>  
    <artifactId>softsmithy-lib-core</artifactId>  
    <version>0.3</version>  
</dependency>  

教程:

http://softsmithy.sourceforge.net/lib/current/docs/tutorial/nio-file/index.html#AddZipResourceSample

API:CopyFileVisitor.copy

于 2013-05-02T14:57:56.317 回答
0

当你完成它们时,你总是想要流式传输(即),最好是在 finally 块中。close()out.close()

于 2013-05-02T14:54:03.367 回答