2011-02-08 18 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

答えて

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

1

私は正直ここに...あなたの問題を再現することはできません。 forループでこのプログラムを複数回実行すると、うまく動作します。プログラムを実行する前に、誤って結果ファイルを開いてロックしていないと確信していますか?

あなたは同時にあなたのプログラムを実行している複数のスレッドを持っていることの懸念がある場合、おそらくあなたは、このように同じファイルを作成しようと二つのスレッドを防ぐために​​ブロックを適用することができます -

... 

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