java - 从 1 个 zip 文件到另一个 zip 文件时出现错误 java.util.zip.ZipException : invalid entry size while copying image (. png)

标签 java zip png inputstream zipoutputstream

我正在尝试修改现有的 .zip 文件,然后创建修改后的副本。

我可以轻松地对 zip 文件中除 .png 文件之外的所有文件执行此操作,这会导致错误

java.util.zip.ZipException: invalid entry compressed size (expected 113177 but got 113312 bytes)

以下代码是我尝试运行的代码,用于简单地从 dice.zip 复制 .​​png 图像并将其添加到 diceUp.zip。

public class Test {
public static void main(String[] args) throws IOException{
    ZipFile zipFile = new ZipFile("dice.zip");
    final ZipOutputStream zos = new ZipOutputStream(new FileOutputStream("diceUp.zip"));
    for(Enumeration<? extends ZipEntry> e = zipFile.entries(); e.hasMoreElements(); ) {
        ZipEntry entryIn = (ZipEntry) e.nextElement();
            if(entryIn.getName().contains(".png")){
                System.out.println(entryIn.getName());
                zos.putNextEntry(entryIn);
                InputStream is = zipFile.getInputStream(entryIn);
                byte [] buf = new byte[1024];
                int len;
                while((len = (is.read(buf))) > 0) {            
                    zos.write(buf, 0, (len < buf.length) ? len : buf.length);
                }
        }
        zos.closeEntry();
    }
    zos.close();
}

最佳答案

只需创建名为 entryIn 对象的新 ZipEntry 对象,并将此新对象放入 zos.putNextEntry 中。
看看这个qustion !
这是我的代码:

    public static void main(String[] args) throws IOException {
    ZipFile zipFile = new ZipFile("/home/*********/resources/dice.zip");
//        ZipFile zipFile = new ZipFile();
    final ZipOutputStream zos = new ZipOutputStream(new FileOutputStream("diceUp.zip"));
    for (Enumeration<? extends ZipEntry> e = zipFile.entries(); e.hasMoreElements(); ) {
        ZipEntry entryIn = e.nextElement();
        if (entryIn.getName().contains(".png")) {
            System.out.println(entryIn.getName());
            ZipEntry zipEntry = new ZipEntry(entryIn.getName());
            zos.putNextEntry(zipEntry);
            InputStream is = zipFile.getInputStream(entryIn);
            byte[] buf = new byte[1024];
            int len;
            while ((len = (is.read(buf))) > 0) {
//                    zos.write(buf, 0, (len < buf.length) ? len : buf.length);
                zos.write(buf);
            }
        }
        zos.closeEntry();
    }
    zos.close();
}

关于java - 从 1 个 zip 文件到另一个 zip 文件时出现错误 java.util.zip.ZipException : invalid entry size while copying image (. png),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37645153/

相关文章:

java - Guava Join 第三个参数 NULL

java - Tomcat Web 应用程序可以告诉负载均衡器它的 Tomcat 已关闭吗?

java - 从 FileChannel (Java NIO) 读取 GZIP 文件

css - CSS Sprites 的 PNG 文件使用的最佳颜色配置文件是什么?

java - 构建 war 时创建额外的 jar

java - 当定义为基类时,调用扩展类对象中的基类方法

java - Matlab,如何在不解压的情况下读取zip.file中的文件

javascript - 在输入元素验证时停止表单提交

python - 使用 PIL 将 PNG32 转换为 PNG8,同时保留透明度

html - 透明 PNG 的 IE6 问题