如何防止ZipInputStream在XSLT转换后被关闭?

cly*_*yde 3 java xslt transform zipinputstream

我有一个ZipInputStream,其中包含我想要应用转换的许多XML文件.下面的代码加载XSLT和ZIP文件并循环遍历ZIP条目,尝试将转换应用于每个条目.但是,转换函数似乎在执行转换后关闭输入流,导致getNextEntry()函数失败,因为流已关闭.

是否有一个简单的方法解决这个问题(保持输入流打开,允许ZipInputStream移动到下一个条目)或者我错过了更基本的东西吗?

TransformerFactory tFactory = TransformerFactory.newInstance();
Transformer transformer = tFactory.newTransformer(new StreamSource(xsltFileName));

FileInputStream fis = new FileInputStream(fileName);
ZipInputStream zis = new ZipInputStream(fis);
ZipEntry ze = null;

while ((ze = zis.getNextEntry()) != null)
{
    String newFileName = ze.getName();
    transformer.transform(new StreamSource(zis), new StreamResult(new FileOutputStream(newFileName)));
}
Run Code Online (Sandbox Code Playgroud)

我试图寻找一个解决方案,但似乎没有想出任何有意义的东西.我很感激任何想法或反馈.

Jil*_*urp 5

一种可能的解决方案是扩展ZipInputStream(它不是最终的)并覆盖close方法以不执行任何操作.当然,你需要确保关闭它自己.您可以使用第二个自定义关闭方法来执行此操作,该方法只需调用super.close().

class MyZIS extends ZipInputStream {

    public MyZIS(InputStream in) {
        super(in);
    }

    @Override
    public void close() throws IOException {
    }

    public void myClose() throws IOException {
        super.close();
    }
}
Run Code Online (Sandbox Code Playgroud)