Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.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 将inputStream从ZipFile转换为字符串_Java_String_Inputstream_Zipfile - Fatal编程技术网

Java 将inputStream从ZipFile转换为字符串

Java 将inputStream从ZipFile转换为字符串,java,string,inputstream,zipfile,Java,String,Inputstream,Zipfile,这里,我的web应用程序的主要功能是上载.zip文件并将其存储在服务器端,但在此之前,我需要执行以下任务: 1。).zip文件包含xml文件,我必须首先使用模式验证xml文件。 2.)如果xml文件有效,则需要将xml文件的内容转换为字符串,而无需解压缩文件(即从inputstream) 我已成功验证xml文件,但在转换inputstream中的字符串时出现以下异常: “java.io.EOFException:ZLIB输入流意外结束” 我已经尝试了Stack Overflow和其他论坛站点提供

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

我已成功验证xml文件,但在转换inputstream中的字符串时出现以下异常: “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());
    }
试试看
{
ZipFile zipFileUtil=新ZipFile(ZipFile);

枚举您不能读取流“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();

您还可以重置streamAWESOME…。它工作了,谢谢@Lotfi。因此,结论是我需要非常努力地改进我的核心概念…:)谢谢again@kromit:我不确定ZipInputStream是否支持重置。如果支持,则重置它是正确的方法:)@Lotfi:it-does->FilterInputStream“在不解压缩文件的情况下将xml文件的内容转换为字符串”没有意义。在解压缩输入之前,没有xml文件。请重试。