Java用流结果覆盖文件

我创建了一个简单的类来创建一个XML文档。 但是,如果在创建具有相同名称的文档时多次调用该方法,则文件不会被覆盖。 我怎样才能让课程自动覆盖现有的同名文件?

import java.io.File;

import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.ParserConfigurationException; import javax.xml.transform.Transformer; import javax.xml.transform.TransformerConfigurationException; import javax.xml.transform.TransformerException; import javax.xml.transform.TransformerFactory; import javax.xml.transform.dom.DOMSource; import javax.xml.transform.stream.StreamResult;

import org.w3c.dom.Document; import org.w3c.dom.Element;

public class XMLCreater { public static void CreateXMLDoc(String name, String root, String[] elements, String[] children) throws TransformerConfigurationException { try { DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance(); DocumentBuilder docBuilder = docFactory.newDocumentBuilder(); Document doc = docBuilder.newDocument(); Element rootElement = doc.createElement(root); doc.appendChild(rootElement);

for (int i = 0; i < elements.length; i ++) { Element element = doc.createElement(elements[i]); element.appendChild(doc.createTextNode(children[i])); rootElement.appendChild(element); } TransformerFactory transformerFactory = TransformerFactory.newInstance(); Transformer transformer = transformerFactory.newTransformer(); DOMSource source = new DOMSource(doc); File dir = new File(System.getProperty("user.dir")); StreamResult result = new StreamResult(new File(dir + "XML" + name + ".xml")); transformer.transform(source, result); } catch(ParserConfigurationException pce){ pce.printStackTrace(); } catch(TransformerException tfe) { tfe.printStackTrace(); } }

}


我使用以下语句执行了您的代码:

public static void main (String[] args) 
{
    XMLCreater x = new XMLCreater();
    String[] s = {"A","B","C"};
    try 
    {
        x.CreateXMLDoc("k","root",s,s);
        x.CreateXMLDoc("k","root",s,s);
        x.CreateXMLDoc("fakih","root",s,s);
    }
    catch (TransformerConfigurationException exception) 
    { exception.printStackTrace(); }
}

它很好地覆盖现有的文件,没有覆盖问题,自己检查。


我会在这里诚实...我无法复制你的问题。 当我在for循环中多次运行该程序时,它对我来说工作正常。 在运行程序之前,您确定没有意外打开结果文件,从而锁定它吗?

如果你担心有多个线程同时运行你的程序,也许你可以应用一个synchronized块来防止两个线程试图写入同一个文件,如下所示: -

...

synchronized (XMLCreater.class) {
    StreamResult result = new StreamResult(new File(dir + "XML" + name + ".xml"));
    transformer.transform(source, result);
}
链接地址: http://www.djcxy.com/p/34935.html

上一篇: Java overwriting files with stream result

下一篇: XML validation using Java Code