解压缩文件Zip异常:条目大小无效(预计193144但得到193138字节)

时间:2012-10-29 13:02:06

标签: java zip unzip

我正在尝试解压缩文件(从FTP服务器检索):

ZipInputStream zis = new ZipInputStream(
    new FileInputStream(zipFile));
    ZipEntry ze = zis.getNextEntry();
    while (ze != null) {
        String fileName = ze.getName();
        File newFile = new File(outputFileName+outputFolder + File.separator + fileName);
        System.out.println("file unzip : " + newFile.getAbsoluteFile());
        FileOutputStream fos = new FileOutputStream(newFile);
        int len;
        while ((len = zis.read(buffer)) > 0) {
            fos.write(buffer, 0, len);
        }
        fos.close();
        sendFile = newFile;
        ze = zis.getNextEntry();
    }
    zis.closeEntry();
    zis.close();
    System.out.println("Done");

.zip文件中只有一个文本文件。此代码在我的本地Windows机器上正常工作。但是,当部署到ubuntu服务器上时,它会抛出以下异常..

java.util.zip.ZipException: invalid entry size (expected 193144 but got 193138 bytes)
at java.util.zip.ZipInputStream.readEnd(ZipInputStream.java:386)
at java.util.zip.ZipInputStream.read(ZipInputStream.java:156)
at java.io.FilterInputStream.read(FilterInputStream.java:90)

at com.empress.Xsync.updater.ClientConfiguration.unZipFile(ClientConfiguration.java:246)

我手动解压缩它。工作正常。 原始.txt文件大小为193144字节。

1 个答案:

答案 0 :(得分:11)

看起来您的zip文件在将其传输到Ubuntu机器的过程中已损坏。尝试从Ubuntu计算机上的命令行解压缩同一文件,看它是否也报告问题。

如果我要随机猜测,那就是你通过FTP传输ZIP文件并使用'ascii'模式而不是'binary'模式。 (FTP可能已将'\r\n'转换为'\n'六次......)