与Java流结果覆盖文件
我创建了一个简单的类来创建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(); } }
}
我执行与下面的语句代码:
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(); }
}
而且它很好地覆盖现有文件,没有约覆盖问题,自己去查。
我的意思覆写多次运行程序... 如果你运行该程序,一旦它会创建一个文件,然后如果你再次运行程序它试图覆盖该文件只是文件变空... – Bob 2011-02-08 19:46:10
我会在这里说实话...我不能复制,你的问题。当我在for循环中多次运行该程序时,它对我来说工作正常。在运行程序之前,您确定没有意外打开结果文件,从而锁定它吗?
如果您担心有在同一时间运行程序多线程的,或许你可以申请一个块,以防止两个线程试图写同一个文件,就像这样: -
...
synchronized (XMLCreater.class) {
StreamResult result = new StreamResult(new File(dir + "\\XML\\" + name + ".xml"));
transformer.transform(source, result);
}
会发生什么代替?什么是Java版本? – BalusC 2011-02-08 19:13:05