Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/apache-kafka/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Can';无法从DataInputStream获取zip条目_Java_Zip_Fileinputstream_Datainputstream - Fatal编程技术网

Java Can';无法从DataInputStream获取zip条目

Java Can';无法从DataInputStream获取zip条目,java,zip,fileinputstream,datainputstream,Java,Zip,Fileinputstream,Datainputstream,我必须解压一个通过URL寻址的zip数据包。(URL和DataInputStream是正确的!) 但是不可能获得任何zip条目。(第一个zip条目为空!) 使用FileOutputStream,它工作得非常好。由于效率问题,我不允许将文件存储在电脑上 有人有想法吗?最可能的问题是如何获取作为dis传递给unZipIt()方法的输入流 您不应该收到DataInputStream,而应该收到一个简单的InputStreamZipInputStream既不使用也不期望输入为DataInputStrea

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

但是不可能获得任何zip条目。(第一个zip条目为空!) 使用FileOutputStream,它工作得非常好。由于效率问题,我不允许将文件存储在电脑上


有人有想法吗?

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

您不应该收到
DataInputStream
,而应该收到一个简单的
InputStream
ZipInputStream
既不使用也不期望输入为
DataInputStream


此外,在保存条目内容时,您应该只读取(并保存)与条目长度相同的字节,直到有更多字节。

upps。我没有复制最后一个{关闭方法-但它肯定在那里;)你能显示代码块“unZipIt”吗调用以及如何初始化DataInputStream?调用此方法时,您可能已经位于流的末尾。您需要关闭FileOutputStream,否则会泄漏文件描述符。DataInputStream是url.openStream()-url是正确的!调用UnzipIt(…)的函数是:private boolean unzipAllFiles()抛出ZipException{File savDir=vManager.getSaveDir();System.out.println(“saveDir:+savDir.getPath());如果(!savDir.exists()){savDir.mkdir();}请尝试{unZipIt(savDir,dis,pos);}捕获(ZipException e){throw e;}返回true;}InputStream作为参数也不起作用。谢谢你的提示。如果它开始起作用,我会试试:你必须向我们展示如何创建/获取传递给
unZipIt()
方法的
dis
输入流,错误很可能不在发布的代码中。URL URL=new URL(fileDownloadDir);URLConnection con=url.openConnection();DataInputStream dis=newdatainputstream(url.openStream());好的,那么您需要做的就是将
url.openStream()
作为
dis
传递给您的
unZipIt()
方法,并且所有这些都应该可以工作-假设
url
指向有效的zip文件。现在我将url.openStream()传递给unZipIt()但第一个条目仍然为空:(
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;
    }