将inputStream从Zip文件转换为String

时间:2012-05-23 07:34:36

标签: java string inputstream zipfile

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

我成功验证了xml文件,但是在从输入流转换字符串时遇到以下异常: “java.io.EOFException:ZLIB输入流的意外结束”

我已经尝试了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());
    }

1 个答案:

答案 0 :(得分:3)

您无法两次阅读“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();