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)
我试图寻找一个解决方案,但似乎没有想出任何有意义的东西.我很感激任何想法或反馈.
一种可能的解决方案是扩展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)