无法从DataInputStream获取zip条目

时间:2014-07-16 09:44:49

标签: java zip fileinputstream datainputstream

我必须解压缩通过URL寻址的zip数据包。 (URL和DataInputStream是正确的!)

private void unZipIt(File baseDir, DataInputStream dis, PipedOutputStream pos) throws ZipException
{
    byte[] buffer = new byte[1024];
    String fileName = "";
    File newFile;
    FileOutputStream fos = null;

    try
    {
        ZipInputStream zis = new ZipInputStream(dis);
        ZipEntry ze = zis.getNextEntry();

        if(ze==null)
        {
            System.out.println("first zip entry is null");
        }

        while (ze != null)
        {
            System.out.println("zip entry is not null");
            fileName = ze.getName();
            newFile = new File(baseDir + File.separator + fileName);

            if (isSavFile(fileName))
            {
                System.out.println(fileName + "is savfile");
                new File(newFile.getParent()).mkdirs();

                fos = new FileOutputStream(newFile);

                int len;
                while ((len = zis.read(buffer)) > 0)
                {
                    fos.write(buffer, 0, len);
                }

                // fos.close();
            }
            ze = zis.getNextEntry();
        }
        zis.closeEntry();
        zis.close();
        // return true;
    }
    catch (IOException e)
    {
        // ex.printStackTrace();
        log.error("unzipping '" + fileName + "'", e);
        throw new ZipException(fileName, e);
        // return false;
    }

但是不可能获得任何zip条目。 (第一个zip条目为空!) 使用FileOutputStream它完美地工作。由于效率,我不允许将文件存储在PC上。

有人有想法吗?

1 个答案:

答案 0 :(得分:0)

最有可能的问题是您如何获取以dis方式传递给unZipIt()方法的输入流。

您不应该收到DataInputStream而是简单的InputStreamZipInputStream不使用也不期望输入为DataInputStream

同样在保存条目内容时,您应该只读取(并保存)与条目长度一样多的字节,而不是直到有更多字节。