gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-02 07:52:18 25 4
gpt4 key购买 nike

我有一个 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)));
}

我试图寻找解决方案,但似乎没有找到任何有意义的东西。如果有任何想法或反馈,我将不胜感激。

最佳答案

一个可能的解决方案是扩展 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();
}
}

关于java - 如何防止 ZipInputStream 在 XSLT 转换后被关闭?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12975532/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com