无法从 DataInputStream 获取 zip 条目



我必须解压缩一个zip数据包,这是通过一个URL地址。(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上存储文件。

有人知道吗?

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

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

另外,当保存条目的内容时,您应该只读取(并保存)条目长度的字节数,直到有更多的字节。

相关内容

  • 没有找到相关文章

最新更新