2

XML ドキュメントを作成する単純なクラスを作成しました。ただし、同じ名前のドキュメントの作成中にメソッドを複数回呼び出すと、ファイルは上書きされません。クラスが同じ名前の既存のファイルを自動的に上書きするようにするにはどうすればよいですか?

java.io.File をインポートします。

javax.xml.parsers.DocumentBuilder をインポートします。 javax.xml.parsers.DocumentBuilderFactory をインポートします。 import javax.xml.parsers.ParserConfigurationException; javax.xml.transform.Transformer をインポートします。 import javax.xml.transform.TransformerConfigurationException; import javax.xml.transform.TransformerException; javax.xml.transform.TransformerFactory をインポートします。 import javax.xml.transform.dom.DOMSource; javax.xml.transform.stream.StreamResult をインポートします。

org.w3c.dom.Document をインポートします。 org.w3c.dom.Element をインポートします。

public class XMLCreater { public static void CreateXMLDoc(String name, String root, String[] elements, String[] children) throws TransformerConfigurationException { 試す { DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance(); DocumentBuilder docBuilder = docFactory.newDocumentBuilder(); ドキュメント doc = docBuilder.newDocument(); 要素 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(); } }

}

4

2 に答える 2

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

そして、既存のファイルをうまく上書きします。上書きについては問題ありません。自分で確認してください。

于 2011-02-08T19:23:44.937 に答える
1

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

複数のスレッドが同時にプログラムを実行することを懸念している場合は、次のようにsynchronizedブロックを適用して、2 つのスレッドが同じファイルを書き込もうとするのを防ぐことができます。

...

synchronized (XMLCreater.class) {
    StreamResult result = new StreamResult(new File(dir + "\\XML\\" + name + ".xml"));
    transformer.transform(source, result);
}
于 2011-02-09T02:02:51.867 に答える