2011-02-08 89 views
0

我創建了一個簡單的類來創建XML文檔。 但是,如果我叫一次創建文件時不會覆蓋同名的文件的方法了。 我如何才能讓這個類自動覆蓋現有的同名文件? 與Java流結果覆蓋文件

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(); } }

}

+0

會發生什麼代替?什麼是Java版本? – BalusC 2011-02-08 19:13:05

回答

1

我執行與下面的語句代碼:

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(); } 
} 

而且它很好地覆蓋現有文件,沒有約覆蓋問題,自己去查。

+0

我的意思覆寫多次運行程序... 如果你運行該程序,一旦它會創建一個文件,然後如果你再次運行程序它試圖覆蓋該文件只是文件變空... – Bob 2011-02-08 19:46:10

1

我會在這裏說實話...我不能複製,你的問題。當我在for循環中多次運行該程序時,它對我來說工作正常。在運行程序之前,您確定沒有意外打開結果文件,從而鎖定它嗎?

如果您擔心有在同一時間運行程序多線程的,或許你可以申請一個​​塊,以防止兩個線程試圖寫同一個文件,就像這樣: -

... 

synchronized (XMLCreater.class) { 
    StreamResult result = new StreamResult(new File(dir + "\\XML\\" + name + ".xml")); 
    transformer.transform(source, result); 
}