将内部Zip条目添加到zip文件

时间:2018-03-13 11:05:38

标签: java java-stream inputstream zipinputstream zipoutputstream

我想以某种方式将文件添加到内部zip条目中。 以下zip文件的结构如下所示:

输入zip文件

|-- directory/
|   |-- zipfile.zip - 
|   |   |-- files.txt - *How can i get these entries to my zipfile.zip*
|   |   |-- files.txt

这只是一小块zip文件。我浏览zip文件并检查条目是否包含更多文件。到目前为止我做了什么

private void handleZipFile(ZipFile input) throws IOException {
    input.stream()
            .forEach(entry -> {
                        try {

                            InputStream in = input.getInputStream(entry);

                            ZipInputStream zis = new ZipInputStream(in);
                            zos.putNextEntry(new ZipEntry(entry.getName()));

                            handleInnerZipEntry(entryName, zis, zos);

                            zos.closeEntry();

                            in.close();
                            zis.close();
                            zos.flush();
                        } catch (IOException e) {
                            e.printStackTrace());
                        }
                    }
            );
    zos.close();
} 

handleInnerZip

private void handleInnerZipEntry(String entryPath, ZipInputStream in, ZipOutputStream out) throws IOException {

    try {
        ZipEntry entry = in.getNextEntry();
        while (entry != null) {
            out.putNextEntry(new ZipEntry(entry.getName())); // Need to put files.txt files

            if (entry.getSize() > 0 && entry.getName().endsWith("zip")) {

                ZipInputStream recursiveIn = new ZipInputStream(in);
                ZipOutputStream recursiveOut = new ZipOutputStream(out);

                handleInnerZipEntry(entryPath, recursiveIn, recursiveOut);

                recursiveOut.flush();

            } else if (entry.getSize() > 0 && !(entry.isDirectory())) {

            }
            in.closeEntry();
            entry = in.getNextEntry();
        }

    } catch (IOException e) {
        CustomLogger.error("IOException: " + e.getLocalizedMessage());
    }
}

1 个答案:

答案 0 :(得分:0)

问题是(如果我理解正确的话)Zip格式不允许,你想要实现的目标(参见https://en.wikipedia.org/wiki/Zip_(file_format)#Structure)。

您必须使用扩充内容创建新的zip文件。此外,可能重复this SO