Java 需要帮助来关闭 Stream



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

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

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

下面的代码是留下未闭合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 中的大多数流都不会引发异常。如果不确定,请再次将其关闭。

更好的是,不要自己创建流; 让StreamResult处理打开和关闭:

StreamResult sr = new StreamResult(new File(fileName));

相关内容

  • 没有找到相关文章

最新更新