3

这里我的 Web 应用程序的主要功能是上传 .zip 文件并将其存储在服务器端,但在此之前我需要执行以下任务: 1.) .zip 文件包含 xml 文件,我必须先验证xml 文件使用架构。2.) 如果 xml 文件有效,我需要将 xml 文件的内容转换为字符串,而不需要从输入流中解压缩文件。

我成功地验证了 xml 文件,但是在从输入流转换字符串时出现以下异常: “java.io.EOFException: Unexpected end of ZLIB input stream”

我已经尝试了 Stack Overflow 和其他论坛站点中提供的所有解决方案,但我还没有成功。任何帮助将不胜感激:

以下是代码:

try
    {
        ZipFile zipFileUtil = new ZipFile(zipFile);
        Enumeration<? extends ZipEntry> zipFileContents = zipFileUtil.entries();
        while(zipFileContents.hasMoreElements())
        {

            ZipEntry zipEntry = zipFileContents.nextElement();
            if(zipEntry.getName().equals("File.xml"))
            {
                InputStream sourceFile = zipFileUtil.getInputStream(zipEntry);
                if(isValidAsPerXSD(sourceFile))
                {
                    //At this line Exception is Generated
                    String xmlContent = IOUtils.toString(sourceFile);
                }
            }
        }

    }
    catch(Throwable t)
    {
        System.out.println("Exception: "+t.getMessage());
    }
4

1 回答 1

2

您不能两次读取流“sourceFile”!输入流应该按顺序读取到最后。您必须将其关闭并重新打开。

InputStream sourceFile = zipFileUtil.getInputStream(zipEntry);
if(isValidAsPerXSD(sourceFile))
{
    sourceFile.close();
    sourceFile = zipFileUtil.getInputStream(zipEntry);
    //At this line Exception is Generated
    String xmlContent = IOUtils.toString(sourceFile);
}
sourceFile.close();
于 2012-05-23T07:44:05.583 回答