首页 > 解决方案 > java.util.zip.ZipException: 无效代码 -- 缺少块尾 --> 在调用 ZipInputStream.closeEntry() 时

问题描述

在 ZipInputStream 上调用 coseEntry() 时,会导致 -->java.util.zip.ZipException: invalid code -- missing end-of-block

private byte[] updateWithNewTraffic(ZipInputStream TrafficZipIn, String action){
    byte[] ByteArr = null;`enter code here`
    try {
        ByteArrayOutputStream OutByteStream = new ByteArrayOutputStream();
        ZipOutputStream zipOut = new ZipOutputStream(OutByteStream);
        HashSet<String> files = new HashSet<String>();

        ZipEntry  entry = TrafficZipIn.getNextEntry();
        while (entry != null) {
            String filename = entry.getName();
            if (FilenameUtils.getExtension(filename.toLowerCase()).equals("txt") {
                zipOut.putNextEntry(new ZipEntry(fileName));
                writeInToOutStream(TrafficZipIn,zipOut );
                zipOut.closeEntry();
            }
            TrafficZipIn.closeEntry();---->getting exception in this line
            entry = TrafficZipIn.getNextEntry();
        }
        TrafficZipIn.close();
        zipOut.close();
        ByteArr = OutByteStream.toByteArray();
        OutByteStream.close();
    } catch (Exception e) {
        //Getting exception.
    }
    return ByteArr;
}
private void writeInToOutStream(InputStream in, OutputStream out) {
    try {
        byte[] buffer = new byte[1024];
        int length;
        while ((length = in.read(buffer)) > 0) {
            out.write(buffer, 0, length);
        }
    } catch (Exception e) {
        //Failed writing to stream
    }
}

标签: java

解决方案


如果您有一个maven项目,请考虑将此部分包含在pom.xml.

Maven 可以在项目编译的资源过滤期间损坏这些文件。

阅读:Maven 资源插件

    <build>
        <resources>
            <resource>
                <directory>src/main/resources</directory>
                <filtering>true</filtering>
                <excludes>
                    <exclude>**/*.xls</exclude>
                    <exclude>**/*.xlsx</exclude>
                </excludes>
            </resource>
            <resource>
                <directory>src/main/resources</directory>
                <filtering>false</filtering>
                <includes>
                    <include>**/*.xls</include>
                    <include>**/*.xlsx</include>
                </includes>
            </resource>
        </resources>

...

推荐阅读