Java 需要帮助来关闭 Stream

标签 java xml dom io stream

我的 DOM 解析器中有一个 DOM 解析器,在写入 XML 文件后,它似乎留下了未关闭的 Stream

我的程序创建一个文件,并调用此代码(如下所示)将 xml-nodes 写入该文件。我的程序还包含一个“删除”文件函数,该函数不起作用,因为有一些 Streams 未关闭 Streams,因此删除文件返回 false。

当我重新运行该程序时,我可以删除该文件。但是每次我在程序内创建一个新文件或编辑现有文件时,该程序似乎都会留下一些打开的Streams.

下面的代码是留下未关闭的Stream的部分。我尝试以某种方式关闭 Streamresult,但没有方法可以关闭它。

public void rewriteXML(){
try{

        DocumentBuilderFactory song = DocumentBuilderFactory.newInstance();
            DocumentBuilder songBuilder = song.newDocumentBuilder();

            Document doc = songBuilder.newDocument();
            Element playlist = doc.createElement("playlist");
            doc.appendChild(playlist);

            TransformerFactory tf = TransformerFactory.newInstance();
            Transformer tr = tf.newTransformer();
            tr.setOutputProperty(OutputKeys.INDENT, "yes");
            DOMSource dom = new DOMSource(doc);
            StreamResult sr = new StreamResult(new FileOutputStream(fileName,false));

            tr.transform(dom, sr);

            System.out.println("done");

        }catch(ParserConfigurationException pce){
            pce.printStackTrace();
        }catch(TransformerException fce){
            fce.printStackTrace();
        }catch(IOException ie){
            ie.printStackTrace();
        }
    }

我需要某种方法来关闭 Stream,或者修复打开的 Stream 的错误,因为我不太确定 Stream 未关闭。

最佳答案

FileOutputStream 是一个StreamStreamResult 不是 Stream,但它包含一个。诀窍是找到它然后将其关闭。

sr.getOutputStream().close()

Michael Kay(评论)指出,StreamResult 使传递给它的任何 Stream 保持打开状态。如果您不知道这一点并且想要安全,那么可能值得注意的是,如果您尝试关闭 Java 中的大多数流两次,它们不会抛出异常。如果您不确定,请再次关闭它。

关于Java 需要帮助来关闭 Stream,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21739412/

相关文章:

java - JPQL 和 HQL 如何结合 INNER JOIN 和 LEFT JOIN

java - DocumentBuilderFactory 在 JDK 1.8.0_121 中没有 setFeature?

javascript - 如何使用纯 JavaScript 将 XML 文件中的数据解析为 HTML 表?

javascript - 如何使用javascript将数据存储在xml文件中?

java - Tomcat 7 超时最后 10 分钟

java - 如何安装 JAVA 8 Debian 8

javascript - 如何停止将值附加到仅更新 jQuery 中的值?

javascript - 创建具有关联 dom 元素的 javascript 对象的首选方法是什么?

java - 如何获得月份的捷克名称

xml - eclipse sts 4 中没有集成图 View ?